Modern UICollectionView
iOS 13
DiffableDataSource
Compositional Layout
iOS 14
Diffable Datasources Reorder
Diffable DataSources SEction Snapshot
Compositional Layout Lists
Cell Registration
Cell Configuration
iOS 15
reconfigureCell
iOS 16
https://betterprogramming.pub/new-in-ios-16-self-resizing-uicollectionview-cells-f02fbb7b45b1
Diffable Data Sources
UICollectionViewDiffableDataSource は、iOS 13 から利用できるようになった API であり、従来の UICollectionViewDataSource を置き換える類のもの
UICollectionViewDataSouce では、セルの構築は、以下のような流れだった
View から必要に応じて ViewController (UICollectionViewDataSource) を呼び出す
ViewController は自身が管理しているアイテムからデータを取り出し情報を返す
問題点としては、セルに反映するデータの取り出しと、セクション数の取り出しと、アイテム数の取り出しが各々独立しているために、不整合が発生しやすいというものがあった
一方、UICollectionViewDiffableDataSource は Item や Section の source of truth を dataSource 側で管理することで、この不整合を発生させないようにしている
データを反映させたい場合は、データそのものを DataSource に受け渡すと、それが反映される
差分がある場合はそれが検知され、イイカンジにアニメーションもしてくれる
UICollectionViewDiffableDataSource では、SectionIdentifierType と ItemIdentifierType を用意する必要がある
ItemIdentifierType は、その名の通り Item の一意性の判断に用いられ、差分更新の際に役立つ
これはセルの Insert/Delete の場合はうまく動くが、Update の場合には望んだ通りに動かない可能性がある
Update の場合には reconfigureItems を利用するといい
Advances in UI Data Sources - WWDC 2019
Advances in UICollectionView - WWDC 2020
Advances in diffable data sources - WWDC 2020
https://www.jessesquires.com/blog/2021/07/08/diffable-data-source-behavior-changes-and-reconfiguring-cells-in-ios-15/
Compositional Layout
item
group
horizontal
vertical
section
https://developer.apple.com/documentation/uikit/views_and_controls/collection_views/layouts
edgeSpacing
contentInset
extimated と併用してはいけない
https://developer.apple.com/documentation/uikit/nscollectionlayoutitem/3199084-contentinsets
group.interItem
section.interGroup
Advances in Collection View Layout - WWDC 2019
Advances in UICollectionView - WWDC 2020
Lists in UICollectionView - WWDC 2020
Cell Configuration
https://swiftsenpai.com/development/uicollectionview-list-custom-cell/
Configurations - Apple Developer
Advances in UICollectionView - WWDC 2020
Modern cell configuration - WWDC 2020
https://developer.apple.com/videos/play/wwdc2020/10105
https://www.jessesquires.com/blog/2021/07/08/diffable-data-source-behavior-changes-and-reconfiguring-cells-in-ios-15/
https://fortee.jp/iosdc-japan-2021/proposal/d810039d-10f4-47c6-9178-c50c1b3c31bf
What's new in UIKit - WWDC 2021
Make blazing fast lists and collection views - WWDC 2021
https://developer.apple.com/videos/play/wwdc2022/10068/
https://developer.apple.com/documentation/uikit/uiimage/building_high-performance_lists_and_collection_views
https://developer.apple.com/documentation/uikit/views_and_controls/collection_views/implementing_modern_collection_views