CollectionViewのサイズを変更する時の方法で一番簡単な方法はUICollectionViewDelegateFlowLayoutを使う方法です。
普段通り、collectionを表示するまで同じで、そこにextensionでUICollectionViewDelegateFlowLayoutを追加して、SizeForItemAtの関数内でサイズを指定します。
collectionViewの表示方法はこちらでまとめています。
今回は、マージンなども書いていますが、以下のコードと同じようにすれば、3Up2Down家計簿でも使っている横並びの自作カレンダーと同じ形にすることができます。
参考にしてください。
extension ViewController: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 10
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CustomCell", for: indexPath) as! CollectionViewCell
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return .init(top: 2, left: 2, bottom: 2, right: 2)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 2
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 2
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
// ここの値を一番大きいセルの値にする
let cellMaxHeight: CGFloat = 32 * 4
let cellCount: CGFloat = 3
let cellLabelHeight: CGFloat = 44 * 3
let cellMargin: CGFloat = 10
let cellMarginCount: CGFloat = cellCount
return CGSize(width: collectionView.bounds.width / 3, height: cellMargin * cellMarginCount + cellMaxHeight * cellCount + cellLabelHeight - 10)
}
}