UICollectionView deleteItemsAtIndexPaths 不能正确地为补充视图设置动画

Posted

技术标签:

【中文标题】UICollectionView deleteItemsAtIndexPaths 不能正确地为补充视图设置动画【英文标题】:UICollectionView deleteItemsAtIndexPaths doesn't animate supplementary views properly 【发布时间】:2013-03-14 17:38:42 【问题描述】:

(以下更新)

当我从集合视图中的某个部分(例如,第 0 部分)中删除项目时,我发现补充视图(在本例中为 UICollectionViewFlowLayout 中的标题)会弹出到位,因为第 0 部分中的单元格会动画消失并且'后面部分的副本'与它们一起动画以匹配已弹出的部分。

自然而然,那些突然出现的可能是“重复”,但这并不重要。就像集合视图可以看到未来!然后正在赶上自己。这就是动画的感觉。

您知道是否有一些怪癖或错误或易于修复来抑制这个额外的弹出补充视图?

更新:我注意到这也发生在单元格中,而不仅仅是部分,而且它似乎“加倍”了屏幕上底部的几个单元格和部分。当我从零部分中删除单元格时,它下面的一些部分和单元格可以正常动画而没有重复,但超过某个点时,它们会弹出。约束问题?

【问题讨论】:

【参考方案1】:

这是 UICollectionViewFlowLayout 的一个错误。无论出于何种原因,UICollectionViewFlowLayout 都无法正确地为不在屏幕上的单元格设置动画。

我已经做了两个解决问题的变通办法,但没有一个可以完全解决。第一个是人为地增加集合视图的框架,以便它创建动画所需的单元格,从而在数据更改时正确动画。这有点小技巧,并不适用于所有情况。

另一种选择是从头开始编写自己的流程布局。这对我有用,复杂性完全取决于你的布局有多复杂。这是我用于编写自己的流程布局的示例:https://github.com/chiahsien/UICollectionViewWaterfallLayout

【讨论】:

以上是关于UICollectionView deleteItemsAtIndexPaths 不能正确地为补充视图设置动画的主要内容,如果未能解决你的问题,请参考以下文章

-[UICollectionView _endItemAnimations] 中的 UICollectionView 断言失败

如何滚动另一个 UICollectionView 下方的 UICollectionView?

UICollectionView 单元内部已加载,但 UICollectionView 未显示

UICollectionView 断言失败 -[UICollectionView _updateWithItems:tentativelyForReordering:]

UITableviewCell 中的 UICollectionView。添加约束后,UICollectionView 不显示

将标题添加到 UICollectionView,而不是 UICollectionView 的部分