6

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

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

此方法的实现负责为给定项目创建、配置和返回适当的单元格。为此,您可以调用 dequeueReusableCellWithReuseIdentifier:forIndexPath:集合视图的方法并传递与您想要的单元格类型相对应的重用标识符。该方法总是返回一个有效的单元格对象。收到单元格后,您应该设置与相应项目的数据对应的任何属性,执行任何其他需要的配置,然后返回单元格。

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

我们如何避免单元的冗余配置?或者有什么我没有正确理解的东西?

4

2 回答 2

1

我认为你无法避免这种情况。问题是UICollectionView太笼统了,FlowLayout 不是唯一的布局。由于您可以进行疯狂的布局,因此任何布局更改(例如 layoutsubviews)都可能完全改变您想要的布局——纵向网格和横向三角形排列......知道布局应该是什么的唯一方法是找出每个单元格的位置和大小。

UICollection视图对于很多元素来说并不便宜。

于 2013-03-20T12:37:48.563 回答
-1

只需配置一个celljust use后cell.tag = 1;,下次就可以避免使用 using 重新配置同一个单元格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;
}
于 2016-02-21T17:29:44.300 回答