1

我正在尝试使用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 方法。但我找不到使用失效和重新计算的自定义布局的任何用法。

4

0 回答 0