UICollectionViewController - 在快速滚动期间有时会显示错误的单元格

时间:2013-06-29 10:41:56

标签: ios ios6

我有一个UICollectionViewController和我的自定义单元格,在我的cellForRowAtIndexPath:方法中,我根据indexPath.row设置了单元格。 但是我得到了错误的结果,这个单元格甚至在第一个位置后出现,如果你来回滚动,它会随机出现。我该如何解决这个问题?

以下是代码:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    DVGCollectionViewCell *cell;

    cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];

    if (indexPath.row == 0)
    {
        cell.imageView.image = [UIImage imageNamed:@"something1.png"];
        cell.buyLabel.text = @"170";
        cell.textLabel.text = @"11.2011";
    }

    return cell;
}

4 个答案:

答案 0 :(得分:4)

UITableView和UICollectionView中的Cell都被回收,这意味着当一个人离开屏幕时,它会被放入NSSet,直到你再次需要它为止。如果需要,它会从UICollectionView视图层次结构中再次添加的设置广告中删除。如果不清除单元格内的值或再次设置它们,则单元格在创建时将显示相同的数据。
这是出于性能原因而创建单元需要更多时间而不是重新评估它们 如果您的问题在布局中,请检查布局流对象,您设置了哪个大小?

答案 1 :(得分:1)

我发现了问题,一旦设置了单元格内容,就永远不会清理它。所以我添加了清理每个单元属性作为附加子句,它工作正常。

答案 2 :(得分:1)

如果在自定义单元格实现中覆盖prepareForReuse,则可以执行任何必要的清理以准备要再次使用的视图。

答案 3 :(得分:0)

this SO post中的一个答案有所帮助:覆盖prepareForReuse并将单元格重置为默认状态。别忘了给super.prepareForReuse打电话。