CollectionViewCell Sizeについて
15980 ワード
CollectionViewCell Sizeについて
UIcollectionViewCellを使用して画像をロードする場合、各Cell間の間隔を調整するために、いくつかの個人的な調査を行いました.
不足や間違いがある場合は、指摘してください.
この文章の目標は、上記の概念を含む簡単なCollectionViewを構築することです.🤓
UIcollectionViewの作成
lazy varとして宣言して初期化
UIcollectionViewFlowLayoutとしてレイアウト
UIcollectionViewCellクラスの作成と登録
DataSource,委任設定
private lazy var collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
collectionView.backgroundColor = .systemBackground
collectionView.register(CollectionViewCell.self, forCellWithReuseIdentifier: "CollectionViewCell")
collectionView.dataSource = self
collectionView.delegate = self
return collectionView
}()
UICollectionViewCell class
final class CollectionViewCell: UICollectionViewCell {
private let imageView = UIImageView()
func setup(with image: UIImage) {
addSubview(imageView)
imageView.snp.makeConstraints {
$0.edges.equalToSuperview()
}
imageView.backgroundColor = .tertiaryLabel
}
}
UICollectionView DataSource
extension ViewController: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 12 //화면에 표시 될 cell 개수
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as? CollectionViewCell //다운캐스팅
cell?.setup(with: UIImage())
return cell ?? UICollectionViewCell()
}
}
CollectionViewCell Sizeの設定
ここでは、U i c o l l e c t i n t i o n w DelegateFlowLayoutプロトコルを使用します.
sizeForItemAtメソッドを使用してCollection ViewCellの各サイズを決定
extension ViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let width: CGFloat = (collectionView.frame.width / 3) - 0.5
return CGSize(width: width, height: width)
}
}
let width: CGFloat = (collectionView.frame.width / 3) - 1.0
1行に3つのセルを表示するには、3をCollectionViewフレームの幅で除算し、間隔を0.5に設定します.
viewDidLoadの追加
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(collectionView)
collectionView.snp.makeConstraints {
$0.leading.trailing.equalToSuperview()
$0.top.equalToSuperview()
$0.bottom.equalToSuperview()
}
}
もしあなたがyorom corom addSubviewを作ってくれて、レイアウトもしてくれたら、今までの様子こうなる!
layout minimumLineSpacing & minimumInteritemSpacing
以前、UIcollectionViewを使用していたときに知りました.
MinimumLineSpacing&MinimumInteritemSpacingは初めて知りました.
アップルの公式ドキュメントを通じて概念と使い方を理解してみましょう.
minimumLineSpacing
The minimum spacing to use between lines of items in the grid.
グリッド内のitemsの最小間隔を設定するには
var minimumInteritemSpacing: CGFloat { get set }
CGFloatを採用.図から見ると.
Scroll layout垂直時の最小行間隔
セルの追加を開始すると、下の行が表示されます.
セルのサイズが異なる場合は、行と行の間の最小間隔を設定します.
Default: 10.0
そして正式な書類を見ました.
If the delegate object does not implement the collectionView(_:layout:minimumLineSpacingForSectionAt:) method,
the flow layout uses the value in this property to set the spacing between lines in a section.
CollectionViewDelegateFlowLayoutプロトコルのCollectionView(:layout:minimumLineSpacingForSectionAt:)メソッドを使用して設定していない場合.
つまり、UICOLLectionViewFlowLayoutに設定されたレイアウトからPropertyをロードして設定することができます!
minimumLineSpacing
The minimum spacing to use between items in the same row.
同じ行のアイテム間の最小間隔を設定
var minimumInteritemSpacing: CGFloat { get set }
同じくCGFloatを採用セルの左右の間隔の最小間隔を設定します.
If the delegate does not implement the
collectionView(_:layout:minimumInteritemSpacingForSectionAt:) method,
the flow layout object uses the value of this property to set the spacing between items in the same line.
上記2つの製品を実際に適用すると、
private lazy var collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
layout.minimumLineSpacing = 0.5
layout.minimumInteritemSpacing = 0.5
//...중략...
return collectionView
}()
このようにUIcollection ViewFlowLayoutを発表する部分では、前の2つの方法で使用しなかったflow layout object layoutをpropertyを使用するように設定できます!完成の様子
なぜベルの画像サイズを調整できないのか-s;
Reference
この問題について(CollectionViewCell Sizeについて), 我々は、より多くの情報をここで見つけました https://velog.io/@iseeu95/CollectionViewCell-Size에-대해テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol