我有一个UICollectionView
格式化为屏幕上单个可水平滚动的行。它表示队列中的下一个条目,因此每当添加和删除项目时,它总是发生在索引0(视图的最左侧),然后整个事物向前或向后移动一个空格。它在代码中非常简单,只需:
[_collectionviewNextUp insertItemsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]]];
和
[_collectionviewNextUp deleteItemsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]]];
除insertItemsAtIndexPaths:
和deleteItemsAtIndexPaths:
的动画外,一切正常,特别是当CollectionView项目超出屏幕边缘时。只要队列中只有6个项目(可以同时看到的数字),它就能完美地动画;但是7个项目或更多,动画变得怪异。删除一个项目(从左侧),它也会动画一个被添加到右侧的项目;添加一个项目(在左侧),它还可以动画从右侧删除的项目。即使队列长度为50个项目,它也总是动画第6项(屏幕上最后一个可见的项目)消失并重新出现。没有错误或警告或任何东西,动画结束后我在视图中保留了正确的项目数,它只是动画在屏幕边缘添加/删除的单元格。
我的理论是可重复使用的细胞正在被动画化。这听起来像是一件事吗?向左和向右滚动工作完美,但插入和删除似乎只是成对动画,并且它们总是“飞入”并“向外飞”同一方向,就像一个人正在占据另一个人的位置。看起来(对于我没有经验的眼睛),就像末端的细胞飞过并添加到前面,或者前面的那个被移动到最后。
我已经尝试过对此进行研究,但我能找到的只是动画问题会引发错误和异常,而我却不这样做。还有其他人经历过这个吗?任何人都可以提供修复,其中索引0项目动画,其余只是平滑地滑入和关闭屏幕?
答案 0 :(得分:1)
我假设你正在使用流程布局。流布局在layoutAttributesForElementsInRect:
边界(即移入和移出视图的项目)中设置了非常错误的动画项目。根据我的经验,你可以通过覆盖'initialLayoutAttributesForAppearingItem'和&来解决其中的一些问题。 finalLayoutAttributesForDisappearingItemAtIndexPath:
方法并在超类返回错误值时更正帧。以下是very similar issue的成功答案。
我开源了一个简单的统一网格布局VCollectionViewGridLayout,它大大改善了UICollectionViewFlowLayout
提供的动画。但是,它目前只进行垂直滚动。但如果你进去并转换所有水平和垂直计算,我相信它会解决你的问题。