我使用UICollectionViewDiffableDataSource作为我的收藏品视图的数据源。在我的CollectionView中有三个部分:
enum Section {
case section1
case section2
case section3
}最初,我使用以下代码将这三个部分附加到collectionView中:
var snapshot = self.diffableDataSource.snapshot()
snapshot.appendSections([.section1, .section2, .section3])
self.diffableDataSource.apply(snapshot)然后,我使用以下代码将项附加到各节:
var snapshot = self.diffableDataSource.snapshot()
snapshot.appendItems([myItems], toSection: .section1)
self.diffableDataSource.apply(snapshot)我的问题是,如果不将一组新的项附加到当前的项中,我就无法找到如何重新加载集合视图中的一个部分。snapshot可用的方法只允许将项附加到节中,但我需要替换节中的项。我尝试删除该部分,并将其追加到后面,然后追加新的一组项:
snapshot.deleteSections([.section1])
snapshot.appendSections([.section1])
snapshot.appendItems([myItems], toSection: .section1)这只是移除部分,但不加载新项。我正在寻找一种方法,简单地用新项刷新该部分,类似于在使用普通collectionView.reloadData()时如何调用UICollectionViewDataSource。
发布于 2020-07-20 14:13:27
直接修改快照
<代码>H19应用快照<代码>H 210<代码>F 211
这是作为UICollectionViewDiffableDataSource扩展的一个通用方法。
extension UICollectionViewDiffableDataSource {
func replaceItems(_ items : [ItemIdentifierType], in section: SectionIdentifierType) {
var currentSnapshot = snapshot()
let itemsOfSection = currentSnapshot.itemIdentifiers(inSection: section)
currentSnapshot.deleteItems(itemsOfSection)
currentSnapshot.appendItems(items, toSection: section)
currentSnapshot.reloadSections([section])
apply(currentSnapshot, animatingDifferences: true)
}
}请用大写字母和单数形式(MyItem)命名表示数据源的结构。
https://stackoverflow.com/questions/62995493
复制相似问题