6

我将UICollectionViewLayout. 到现在为止还挺好。
但是,我有一些比屏幕更宽的单元格,有时这些单元格会在滚动时消失。当您再滚动一些时,它们会神奇地重新出现在它们应该出现的位置。我可以向您展示我的代码,但我认为它没有任何问题,因为它在 90% 的情况下都有效。但是,真正大的单元格(超过屏幕尺寸的两倍)有时会消失。

NSMutableArray* attributes = [NSMutableArray array];
for (int section=0; section < [[self collectionView] numberOfSections]; section++) {
    [attributes addObject:[self layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader atIndexPath:[NSIndexPath indexPathForItem:0 inSection:section]]];
        for (int row=0; row < [[self collectionView] numberOfItemsInSection:section]; row++) {
            NSIndexPath* indexPath = [NSIndexPath indexPathForItem:row inSection:section];
            [attributes addObject:[self layoutAttributesForItemAtIndexPath:indexPath]];
        }
 }
 return attributes;

我也有这些帖子:UICollectionView 的单元格消失和UICollectionView 中的大单元格在单元格仍然显示时被删除 但是,没有提到解决方案。有人可以帮我吗?会不会是苹果那边的问题?如果是,有什么我可以自己解决的吗?

4

2 回答 2

5

很抱歉告诉你:我很确定这是 UICollectionView 中的一个真正的错误;几周前我遇到了同样的事情。我编写了一个小程序来演示该错误并向 Apple 提交了 RADAR,但尚未收到有关他们是否或是否计划修复它的回复。我能想到的最好的解决方法(警告:我还没有实现这个解决方法)是注意到布局属性离屏幕边缘很远,故意改变单元格属性的边界,所以它只会稍微偏离屏幕,并可能将该偏移量(您从实际边界修剪掉的量)存储为 layoutAttributes 中的附加自定义字段,以便您的单元格知道正确绘制它的内容。这感觉像是一个严重的黑客攻击,但它应该工作。

于 2013-02-19T18:36:10.210 回答
0

您确定在-(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect调用方法并且 rect 只是您的单元格的一部分时为此单元格返回正确的属性对象吗?

于 2012-12-20T13:35:09.547 回答