雑学1472593 views
高校化学2913383 views
高校日本史189857 views
小学理科717236 views
高校倫理1433119 views
中学社会667106 views
ヒストリア284143 views
中学数学621382 views
LaTeX957300 views
小学社会308636 views
Help
Tools

English

UICollectionViewCellの表示エラー:高さが足りないとcellForItemAtは値を返さない

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などは考える必要ない。