728x90
반응형
1. 셀 데이터 / 셀 배치
(DataSource → DiffableDataSource)
- viewDidLoad 함수와 같은 레벨에 작성
- UICollectionViewDiffableDataSource 의 Section, Item 의 타입은 Hashable
- 따로 작성한 구조체의 타입이 Hashable 인지 확인
<swift />
var dataSource: UICollectionViewDiffableDataSource<Section, Item>!
typealias Item = AppleFramework // 별명 부여
enum Section {
case main
}
- viewDidLoad 함수 내부에 작성
<swift />
dataSource = UICollectionViewDiffableDataSource<Section, Item>(collectionView: collectionView, cellProvider: { collectionView, indexPath, item in
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "[앱id]CollectionViewCell", for: indexPath) as? [앱id]CollectionViewCell else {
return nil
}
cell.configure(item)
return cell
})
var snapshot = NSDiffableDataSourceSnapshot<Section, Item>()
snapshot.appendSections([.main])
snapshot.appendItems(list, toSection: .main)
dataSource.apply(snapshot)
collectionView.collectionViewLayout = layout()
- viewDidLoad 함수와 같은 레벨에 작성
<swift />
private func layout() -> UICollectionViewLayout {
// 가로 : 가로 길이의 1/3
// 세로 : 세로 길이 그대로 사용
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1/3), heightDimension: .fractionalHeight(1))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
// 가로: 가로 길이 그대로 사용
// 세로: 가로 길이의 1/3을 세로 길이로 설정
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .fractionalWidth(4/9))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, repeatingSubitem: item, count: 3)
let section = NSCollectionLayoutSection(group: group)
section.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 16, bottom: 0, trailing: 16)
let layout = UICollectionViewCompositionalLayout(section: section)
return layout
}
728x90
반응형
'iOS' 카테고리의 다른 글
[ iOS ] Navigation (0) | 2023.02.27 |
---|---|
[ iOS ] Modal (0) | 2023.02.24 |
[ iOS ] PagingView (0) | 2023.02.20 |
[ iOS ] CollectionView - 2 (0) | 2023.02.17 |
[ iOS ] Assistant 모드 (0) | 2023.02.13 |