我正在尝试使用NSDiffableDataSource
我的自定义 CollectionView 布局。每个单元格的位置和大小取决于集合中元素的数量。它还使用 UIDynamicAnimator 来产生弹性行为。问题是当添加或删除一个新单元格时,其他单元格的布局不会改变,即使我.invalidateLayout()
在应用新快照后调用也是如此。我应该在哪里称呼它?或者,我应该使用其他方法吗?
func applySnapshot(animatingDifferences: Bool = true) {
var snapshot = Snapshot()
snapshot.appendSections(["main"])
snapshot.appendItems(models)
self?.collectionView.collectionViewLayout.invalidateLayout()
// Does not change anything
dataSource.apply(snapshot, animatingDifferences: animatingDifferences, completion: { [weak self] in
self?.collectionView.collectionViewLayout.invalidateLayout()
// Does not change anything
})
}
当我使用旧的 UIDataSource 方法时,一切正常。我在重新加载我的收藏之前使布局无效
public func update(profiles: [CreatorProfileProtocol]) {
let models = profiles. map {...}
self.models = models
(collectionView.collectionViewLayout as? CustomSpringyLayout)?.updateContentSize(for: models.count)
collectionView.collectionViewLayout.invalidateLayout()
collectionView.reloadData()
}
我想要更流畅地更新我的收藏,所以我转向了 DiffableDataSource 方法。但我找不到使用失效和重新计算的自定义布局的任何用法。