在长列表上滚动时,UICollectionView单元格批量加载

时间:2014-11-18 23:27:13

标签: ios ios8 uicollectionview

我有一个带有UICollectionViewFlowLayout的UICollectionView,我将其用作UITableView。我没有使用UITableView,因为我们需要一些自定义功能,这是桌面视图无法实现的。

当列表变长(~150 +项目)时,集合视图在滚动时开始奇怪地呈现单元格。它们不是在滚动时一次加载一个,而是分批加载。这会导致滚动时暂时显示空白视图,如果您一直滚动到底部项目将会丢失(因为您无法向下滚动到足以让它们加载)。我只在iOS 8中试过这个。

该效果类似于this question中显示的效果,除了这种情况发生在最多整页的单元格中以及在滚动期间而不是在删除动画期间。

此外,只会偶尔调用prepareForReuse。我检查以确保通过禁用所有辅助功能设置来阻止辅助功能,但这不是问题。

这是代码,但它只是一个带有流程布局实现的标准UICollectionView,所以我不确定它是否有用:

- (void)configureCollectionView
{
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];

    collectionView.alwaysBounceVertical = YES;
    collectionView.delegate = self;
    collectionView.dataSource = self;
    collectionView.backgroundColor = [UIColor clearColor];
    collectionView.translatesAutoresizingMaskIntoConstraints = NO;
    [self.collectionViewContainer addSubview:collectionView];
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    id<SectionInfo> sectionInfo = [self.collectionList.sections objectAtIndex:section];
    return sectionInfo.numberOfObjects;
}

- (UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    id object = [self.collectionList objectAtIndexPath:indexPath];
    UICollectionViewCell *cell = nil;
    if ( [object isKindOfClass:[CustomListItem class]] ) {
        CustomItemCell *cCell = [collectionView dequeueReusableCellWithReuseIdentifier:[CustomItemCell reuseIdentifier] forIndexPath:indexPath];
        [cCell setItem:object];
        cell = cCell;
    }
    return cell;
}

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return [self.collectionList.sections count];
}

有没有人见过类似的问题?有什么想法吗?

0 个答案:

没有答案