무엇이(어떤 데이터가), 어디에(어떤 레이아웃에), 보여지는 지 (어떻게 렌더링 되는지) 관점으로 살펴봤을 때
지금까지 데이터는 인덱스 기반 프로토콜인 UICollectionViewDataSource로 관리되고 있었습니다.
레이아웃은 UICollectionViewLayout이 있었고, 주로 구체적인 하위 클래스(Concrete Subclass)인 UICollectionViewFlowLayout을 사용하고 있었습니다.
iOS 13에서 DiffableDataSource, Compostional Layout인 최신 API가 도입되었습니다.
iOS 14에서 이를 기반으로 새로운 기능(Section Snapshot, List Configuration, etC)를 만들어 냈습니다.
List Configuration은 Compostional Layout을 기반으로 만들어졌고 컬렉션 뷰를 테이블 뷰처럼 사용할 수 있게 되었습니다.
섹션별로 다른 레이아웃 설정도 가능하고, 스와이프 등의 기능들을 컬렉션 뷰에서 구현 가능하게 되었습니다.
UICollectionLayoutListConfiguration
List는 테이블뷰와 유사한 모양을 컬렉션뷰에서 구현할 수 있는 구조로, UICollectionViewCompostionalLayout과 NSCollectionLayoutSection을 기반으로 구성되어 있습니다.( NSCollectionLayoutSection는 섹션 별 레이아웃 설정을 별도로 할 때 사용됨)
따라서 유연한 레이아웃 대응이 가능 and Self-Sizing 기능을 통해 셀 높이를 수동으로 계산을 할 필요가 없음
List 형태의 레이아웃을 만들기 위한 구조체로 모든 섹션에 동일한 configuration을 적용할 수도 있고 각 섹션마다 다른 레이아웃을 적용할 수 있음.
plain, grouped, inset grouped와 같은 appearance 설정이 가능함.
그 외 separator, header, footer, swipe 등의 처리도 가능함
UICollectionLayoutListConfiguration
var configuration = UICollectionLayoutListConfiguration(appearance: .insetGrouped)
configuration.showsSeparators = false
configuration.backgroundColor = .brown
let layout = UICollectionViewCompositionalLayout.list(using: configuration)
collectionView.collectionViewLayout = layout
각 섹션에 모두 동일한 configuraiton을 설정할 수 있는 예시
UICollectionView.CellRegistration
14이상에서 등장한 Registeration API로 셀 재사용을 보다 쉽게 구현해두었습니다.
기존의 Cell Identifier나 XIB 등록하는 메서드 대신 제너릭 형태를 사용하고, 새 셀이 생성될 때마다 클로저가 호출됨
UICollectionView.CellRegistration
cellRegisteration 선언
var list = [
User(name: "뽀로로", age: 3),
User(name: "에디", age: 13),
User(name: "해리포터", age: 33),
User(name: "도라에몽", age: 5),
]
//cellForItemAt 전에 생성되어야 한다.
var cellRegistration: UICollectionView.CellRegistration<UICollectionViewListCell, User>!