UICollectionView单元配置太多次

时间:2013-03-20 12:20:36

标签: ios ios6 uicollectionview uicollectionviewcell

我注意到UICollectionView在其数据源上调用了collectionView:cellForItemAtIndexPath:很多次。例如,在每个layoutSubviews上,所有单元格都被“重新配置”,无论它们是否已经可见。

调用collectionView:cellForItemAtIndexPath:时,我们应该:

  

您对此方法的实施负责创建,   配置并返回给定项目的相应单元格。   你这样做是通过调用   dequeueReusableCellWithReuseIdentifier:forIndexPath:方法   集合视图并传递与之对应的重用标识符   你想要的细胞类型。该方法始终返回有效单元格   宾语。收到单元格后,您应该设置任何属性   对应于相应项目的数据,执行任何   额外需要的配置,并返回单元格。

问题是配置单元并不总是一个便宜的操作,我不明白为什么我应该重新配置已经配置的单元。

我们如何避免细胞的冗余配置?或者有什么我不能正确理解?

2 个答案:

答案 0 :(得分:1)

我认为你不能避免这种情况。问题是 UICollectionView 是如此通用,而FlowLayout不是唯一的布局。由于您可以制作疯狂的布局,任何布局更改(如布局子视图)都可以完全改变您想要的布局 - 纵向网格和横向三角形排列...了解布局应该是什么的唯一方法是找出每个细胞的位置和大小。

对于很多元素来说,

UICollection 视图便宜。

答案 1 :(得分:-1)

配置cell后,只需使用cell.tag = 1;,然后下次使用if(!cell.tag)即可避免重新配置相同的单元格。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:YourCellReuseIdentifier forIndexPath:indexPath];
    if(!cell){
        //Create cell ...
    } 
    if(!cell.tag){
        //Do things you have to do only once
    }
    else{
        //DO things you have to do every time.
    }

    return cell;
}