滚动时,大型UICollectionViewCell停止显示

Kai*_*ann 19 iphone ios uicollectionview

UICollectionView这里描述的相同行为导致了这个问题.即使我决定发布自己的,因为我做了进一步的调查,我不想发表评论或编辑上述问题.

怎么了?:

当正在显示大的细胞在UICollectionViewUICollectionViewFlowLayout,滚动集合视图到一定的偏移后,细胞将消失.

当进一步滚动直到另一个单元格进入可见区域时,消失/隐藏的单元格再次变为可见.

我测试了垂直滚动集合视图和全宽度单元格,但我很确定,它也会发生类似的水平滚动设置.

什么是大细胞?:

所述行为发生在高于显示高度两倍的单元格(960.f + 1.f在3,5英寸显示器上,1136.f + 1.f在4英寸上).

什么确切地发生?:

当滚动的集合视图的偏移超过cell.frame.origin.y + displayHeightOfHardware隐藏属性设置到细胞YES-collectionView:didEndDisplayingCell:forItemAtIndexPath:被调用(例如,第一小区改变为隐藏时scrollingOffset.y达到481.f3,5-英寸iPhone).

如上所述,当滚动,直到下一个单元格映入眼帘,隐藏的电池被再次显示(即隐藏属性的变化NO),此外,滚动足够远的小区时将不会再消失,当它不应该,无论你在哪里滚动到.

使用大于triple-display-height(1441.f/1705.f)的单元格时,这会发生变化.那些表现出相同的行为,但它们保持不变,无论它们上下滚动多远.

还有什么?:

超越-(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds返回无法解决这种情况YES.

在隐藏属性NO后,可以通过以编程方式将隐藏属性设置为强制显示单元格(didEndDisplayingCell例如)

那么,问题是什么?:

我很确定,这是一个错误UICollectionView/Controller/Cell/Layout,我将在Apple提交TSI.但与此同时:有没有人对快速黑客解决方案有任何想法

Jon*_*hon 9

我有一个非常脏的内部解决方案来解决这个问题:

@interface UICollectionView ()
- (CGRect)_visibleBounds;
@end

@interface MyCollectionView : UICollectionView

@end

@implementation MyCollectionView

- (CGRect)_visibleBounds {
    CGRect rect = [super _visibleBounds];
    rect.size.height = [self heightOfLargestVisibleCell];
    return rect;
}

- (float)heightOfLargestVisibleCell {
    // do your calculations for current max cellHeight and return it 
    return 1234;
}

@end
Run Code Online (Sandbox Code Playgroud)

  • 有人发布雷达的链接,所以我可以复制它?我想看到这个解决了. (2认同)