UICollectionView在布局转换期间错误地隐藏了单元格

时间:2014-05-19 22:23:21

标签: ios uicollectionview transitions uicollectionviewlayout

关于隐藏单元格的UICollectionView错误有一些问题,但我不认为这个错误已被覆盖。大多数其他问题似乎与UICollectionViewFlowLayout和部分插入有关,而我在完全自定义布局之间转换时遇到了这个问题。


执行交互式布局转换时,UICollectionView似乎隐藏了不应隐藏的单元格:

enter image description here

(注意转换过程中左下方的单元格40和45消失)

它似乎发生在特定的地方:每当单元格的布局属性(从转换布局返回layoutAttributesForElementsInRect:)都有一个minX小于传入的{{{{{ 1}} minX和maxY大于rect的maxY。在代码中:

rect

转换布局返回正确的布局属性,显示单元格的中心逐渐在屏幕外移动。但是,一旦它超过了上面提到的那一点,集合视图似乎决定它不再可见(它是!)并将单元格的- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { NSArray *layoutAttributes = [super layoutAttributesForElementsInRect:rect]; for (UICollectionViewLayoutAttributes *attr in layoutAttributes) { if (CGRectGetMinX(attr.frame) < CGRectGetMinX(rect) && CGRectGetMaxY(attr.frame) > CGRectGetMaxY(rect)) { NSLog("Element at index path %@ will disappear unexpectedly", attr.indexPath); } } return layoutAttributes; } 属性设置为yes,忽略它直到它的帧移动进一步在hidden内。

我已经整理了一个sample project来演示这个问题(上面的动画就是这个样本的实际应用)。为简单起见,它使用了两个简单的流布局,但在处理自定义rect子类之间的转换时,我首先注意到了它。大多数代码只是使用捏手势识别器来管理交互式过渡,我非常确定那里没什么了不起。

使用简单的动画布局过渡(UICollectionViewLayout)时似乎没有问题...尝试使用慢动画运行示例项目,然后点击一个单元格 - 所有单元格按预期动画。

这似乎是setCollectionViewLayout:animated:对我实施的错误,但如果有人知道有效的解决方法,我真的很感激。


更新

我已向Apple提交了错误报告,同时打开了技术支持事件,以查看是否可以找到解决方法。如果我从工程师那里学到任何有用的东西,我会添加一个答案。

更新

Apple DTS回复确认此 是一个错误,并且没有解决方法。对于我的情况,我最终只是强迫消失的细胞不达到魔法阈值,使它们消失。

0 个答案:

没有答案