Bắt đầu từ iOS 13 Apple đưa ra cách implement UICollectionView và UITableView DataSource mới thay cho numberOfItemsInSection và CellForRowAtIndex
Cách implement mới khắc phục các yếu điểm của DataSource trước đây:
Mỗi section và cell item là unique để thể tự động reload và apply animation thích hợp khi datasource có sự thay đổi (conform to hashable)
Kích thước của section, cell dễ dàng được tính theo tỉ lệ so với width, height của scrollview, ngoài ra còn tính theo absolute point hay estimate theo content size.
CollectionView từ giờ có thể dễ dàng nhúng nhiều group scrollview con vào mà không cần add add sub collectionView vào cell. Điều này giúp ta flatmap collection, giảm sự phức tạp khi code và tăng performance khi cuộn.
extension ListViewController {
private func createLayout() -> UICollectionViewLayout {
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),
heightDimension: .fractionalHeight(1.0))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),
heightDimension: .absolute(44))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize,
subitems: [item])
let section = NSCollectionLayoutSection(group: group)
let layout = UICollectionViewCompositionalLayout(section: section)
return layout
}
private func configureDataSource() {
dataSource = UICollectionViewDiffableDataSource<Section, Int>(collectionView: collectionView) {
(collectionView: UICollectionView, indexPath: IndexPath, identifier: Int) -> UICollectionViewCell? in
// Get a cell of the desired kind.
guard let cell = collectionView.dequeueReusableCell(
withReuseIdentifier: ListCell.reuseIdentifier,
for: indexPath) as? ListCell else { fatalError("Cannot create new cell") }
// Populate the cell with our item description.
cell.label.text = "\(identifier)"
// Return the cell.
return cell
}
// initial data
let snapshot = NSDiffableDataSourceSnapshot<Section, Int>()
snapshot.appendSections([.main])
snapshot.appendItems(Array(0..<94))
dataSource.apply(snapshot, animatingDifferences: false)
}
}
Bắt đầu từ iOS 13 Apple đưa ra cách implement UICollectionView và UITableView DataSource mới thay cho numberOfItemsInSection và CellForRowAtIndex
Cách implement mới khắc phục các yếu điểm của DataSource trước đây:
Mỗi section và cell item là unique để thể tự động reload và apply animation thích hợp khi datasource có sự thay đổi (conform to hashable)
Kích thước của section, cell dễ dàng được tính theo tỉ lệ so với width, height của scrollview, ngoài ra còn tính theo absolute point hay estimate theo content size.
CollectionView từ giờ có thể dễ dàng nhúng nhiều group scrollview con vào mà không cần add add sub collectionView vào cell. Điều này giúp ta flatmap collection, giảm sự phức tạp khi code và tăng performance khi cuộn.