Stu*_*art 7 transitions ios uicollectionview uicollectionviewlayout
有一些关于UICollectionView隐藏细胞的错误的问题,但我不认为这个问题已被覆盖.大多数其他问题似乎特别关注UICollectionViewFlowLayout和部分插入,而我在完全自定义布局之间转换时看到了这个问题.
执行交互式布局转换时,UICollectionView似乎隐藏了不应隐藏的单元格:

(注意转换过程中左下角的单元格40和45消失)
它似乎发生在一个特定的地方:每当单元格的布局属性(从转换布局返回layoutAttributesForElementsInRect:)的框架的minX小于传入rect的minX和maxY大于rect's maxY.在代码中:
- (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;
}
Run Code Online (Sandbox Code Playgroud)
过渡布局返回正确的布局属性,显示单元格的中心逐渐在屏幕外移动.但是,一旦它超过了上面提到的那一点,集合视图似乎决定它不再可见(它是!)并将单元格的hidden属性设置为yes,忽略它直到其框架进一步移动rect.
我已经整理了一个演示此问题的示例项目(上面的动画就是这个样本的实际应用).为简单起见,它使用了两个简单的流布局,但我在处理自定义UICollectionViewLayout子类之间的转换时首先注意到了它.大多数代码只是使用捏手势识别器管理交互式转换,我很确定那里没什么了不起的.
当使用简单的动画布局过渡(setCollectionViewLayout:animated:)时,似乎不会发生这个问题...尝试使用慢动画运行示例项目,然后点击一个单元格 - 所有单元格按预期动画.
这UICollectionView对我来说似乎是一个错误,但如果有人知道有效的解决方法,我真的很感激.
更新:
我已向Apple提交了错误报告,同时打开了技术支持事件,以查看是否可以找到解决方法.如果我从工程师那里学到任何有用的东西,我会添加一个答案.
更新:
Apple DTS回复确认这是一个错误,并且没有解决方法.对于我的情况,我最终只是强迫消失的细胞达不到使它们消失的神奇阈值.
| 归档时间: |
|
| 查看次数: |
992 次 |
| 最近记录: |