UICollectionViewで必ず設定するのが
numberOfItemsInSection
cellForItemAt
sizeForItemAt
の3つ。一番下は必須でないが、実際は必須になるため設定する。cellForItemAtとsizeForItemAtは返す値が異なるときがある。UICollectionViewの高さが足りない場合だ。
セルの高さの合計値がUICollectionViewの高さを超えると、実はcellForItemAtは途中で消える。しかしsizeForItemAtは返す。もっとわかりやすく説明しよう。
例えば1から10までのセルを表示したいとする。しかしUICollectionViewの高さは1から6までのセルしか画面に収められなかった。このときシミュレーターでは7から10までは表示されない。
このときプログラム内部では、sizeForItemAtはきちんと10までを返している。しかしcellForItemAtは6までしか返していない。
解決法
UICollectionViewのレイアウトを縦にスクロールするようにする。
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
collectionView = UICollectionView(frame: CGRect(x: 0, y: 0, width: 300, height: 300), collectionViewLayout: layout)
layout.scrollDirection = .verticalを記述するだけですべてのセルがきちんと表示される。UIScrollViewなどは考える必要ない。