SwiftのUICollectionViewはカスタムヘッダーよりカスタムセルを使う
UICollectionViewにヘッダーをつけたいときは、セルをカスタマイズしてヘッダー化すると効率がいい。
理由:
reloadDataのときにUICollectionViewが一回で更新されるため。
viewForSupplementaryElementOfKindを使って特殊なヘッダーを用意してもいいと思う。しかしAlamofireなどでヘッダーとセルを更新する場合、つまりヘッダーとセルの両方を一度に更新したい場合、さまざまなところで難題が出てくる。それ以前に、複雑さが増して開発者の精神がもたない。この辺りは文献も少ない。
まとめ:
UICollectionViewのヘッダーはカスタムセルを使う。
やり方
- 通常のセルとヘッダーに使うセルの2種類を用意する。
- 両方ともregisterする。このとき、forCellWithReuseIdentifierはたぶん違うフレーズにしたほうがいい。
- numberOfItemsInSectionを通常より1つ増やす。
- cellForItemAtでヘッダーセルと通常セルを場合分けする。
- sizeForItemAtでヘッダーセルと通常セルを場合分けする。
- didSelectItemAtでヘッダーセルと通常セルを場合分けする。
この記事はメモです。