ios - UICollectionView 动画可重用单元格?

标签 ios uicollectionview

我有一个 UICollectionView,其格式为屏幕上可水平滚动的单个行。它代表队列中的下一个条目,因此每当添加和删除项目时,它总是发生在索引 0( View 的最左侧),然后整个事物向前或向后移动一个空格。代码非常简单,只需:

[_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 项(屏幕上最后一个可见的项目)消失并重新出现。没有错误或警告或任何东西,动画结束后我在 View 中留下了正确数量的项目,它只是在屏幕边缘添加/删除单元格的动画。

我的理论是可重复使用的单元格正在被动画化。这听起来像是一件事吗?左右滚动效果很好,但插入和删除似乎只能成对进行动画,并且它们总是以相同的方向“飞入”和“飞出”,就好像一个正在取代另一个的位置一样。它看起来(在我缺乏经验的眼睛看来)就像末端的单元格被飞过并添加到前面,或者前面的单元格被移到末端。

我尝试对此进行研究,但我所能找到的只是引发错误和异常的动画问题,而我的却没有这样做。还有其他人经历过吗?任何人都可以提供一个修复程序,其中索引 0 项目会变得动画,而其余项目只是平滑地滑入和滑出屏幕?

最佳答案

我假设您正在使用流布局。流布局在跨 layoutAttributesForElementsInRect: 边界(即项目移入和移出 View )时存在很多问题。根据我的经验,您可以通过重写 'initialLayoutAttributesForAppearingItem' 和 finalLayoutAttributesForDisappearingItemAtIndexPath: 方法并在父类(super class)返回错误值时更正帧来解决其中一些问题。这是对 very similar issue 的成功回答。 .

我开源了一个简单的统一网格布局VCollectionViewGridLayout与 UICollectionViewFlowLayout 提供的动画相比,它大大改进了动画。但是,它目前仅支持垂直滚动。但如果您进入那里并调换所有水平和垂直计算,我相信它会解决您的问题。

关于ios - UICollectionView 动画可重用单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18143344/

相关文章:

ios - CGPathCreateCopyByTransformingPath 到 Swift 3

ios - UICollectionView 委托(delegate)方法的问题

ios - 如何将数据从collectionView和tableView传递到detailViewController?

ios - 在 Interface Builder 中为 Collection View Cell 设置 Reuse Identifier 有什么意义?

android - Flutter - 使用正则表达式验证电话号码

html - iOS Safari 手机 : Doesn't show huge images in correct size

ios - Firebase queryOrderedbyChild 不返回 Null 值

ios - 如何知道在 UICollectionView 中点击了自定义单元格的哪一部分?

ios - 将数据传递给 UICollectionReusableView

iphone - iPad 快速显示图像时出现重影