Ios UICollectionView在布局转换期间不正确地隐藏单元格

Ios UICollectionView在布局转换期间不正确地隐藏单元格,ios,uicollectionview,transitions,uicollectionviewlayout,Ios,Uicollectionview,Transitions,Uicollectionviewlayout,关于UICollectionView隐藏单元格的bug有一些问题,但我认为这一个问题还没有被涵盖。大多数其他问题似乎都与UICollectionViewFlowLayout和部分插图有关,而我在完全自定义的布局之间转换时看到了这个问题 执行交互式布局转换时,UICollectionView似乎在隐藏不应隐藏的单元格: (注意左下角的单元格40和45在转换过程中消失) 它似乎发生在一个特定的位置:每当单元格的布局属性(从转换布局的layouttributesforementsinrect:返回

关于
UICollectionView
隐藏单元格的bug有一些问题,但我认为这一个问题还没有被涵盖。大多数其他问题似乎都与
UICollectionViewFlowLayout
和部分插图有关,而我在完全自定义的布局之间转换时看到了这个问题


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

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

它似乎发生在一个特定的位置:每当单元格的布局属性(从转换布局的
layouttributesforementsinrect:
返回)有一个minX小于传入的
rect
的minX且maxY大于
rect
的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;
}
-(NSArray*)布局属性ForElementsInRect:(CGRect)rect
{
NSArray*layoutAttributes=[super layoutAttributes ForElementsInRect:rect];
对于(UICollectionViewLayoutAttribute*LayoutAttribute中的属性){
if(CGRectGetMinX(attr.frame)CGRectGetMaxY(属性帧)){
NSLog(“索引路径%@处的元素将意外消失”,attr.indexath);
}
}
返回布局属性;
}
过渡布局返回正确的布局属性,显示单元格的中心逐渐移离屏幕。但是,一旦它通过了上述点,集合视图似乎决定它不再可见(它是!),并将单元格的
hidden
属性设置为yes,忽略它,直到其帧在
rect
中进一步移动

我已经制作了一个演示这个问题的动画(上面的动画就是这个示例的动画)。为了简单起见,它使用了两个简单的流布局,但我第一次注意到它是在处理自定义
UICollectionViewLayout
子类之间的转换时。大部分代码只是使用一个捏手势识别器来管理交互转换,我很确定没有什么值得注意的

当使用普通动画布局转换(
setCollectionViewLayout:animated:
)时,问题似乎不会发生。。。尝试使用慢速动画运行示例项目,并点击一个单元格-所有单元格均按预期设置动画

对我来说,这似乎是
UICollectionView
实现中的一个bug,但如果有人知道有效的解决方法,我会非常感激


更新:

我已经向苹果提交了一份bug报告,同时打开了一个技术支持事件,看看是否可以找到解决方法。如果我从工程师那里学到了什么有用的东西,我会补充一个答案

更新:


苹果DTS回应确认这是一个bug,并且没有解决方法。在我的例子中,我最终只是强迫消失的细胞不要达到使它们消失的魔法阈值。

+1我遇到了同样有趣的问题:)@Stuart-你听到过什么回音吗?我想我也遇到了这个问题。@Kelan是的,不幸的是他们确认这是一个bug,目前没有解决方法。在我的例子中,我只需要手动强制消失的细胞不达到那个神奇的阈值。我很幸运,在我的情况下,这个问题不太明显;对其他人来说,我认为这不会那么容易。