UICollectionViewCell上的子视图在单元格之间跳转

时间:2015-12-07 06:43:32

标签: uicollectionview uicollectionviewcell

我有一个UICollectionView,其上有多个部分和多种类型的自定义单元格。

但是,不是在相同类型的每个单元格上显示相同的子视图,每次我从屏幕上滚动该部分并重新打开时,只有部分自定义单元格显示它们上的子视图。

请检查以下屏幕截图:

enter image description here enter image description here

为什么?

我在viewDidLoad注册了各种单元格:

[self registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:normalCellID];
[self registerClass:[BLMineSectionCollectionViewCell class] forCellWithReuseIdentifier:sectionCellID];
[self registerClass:[BLMineOrderCollectionViewCell class] forCellWithReuseIdentifier:orderCellID];

我在cellForItemAtIndexPath做了:

if (indexPath.section == 0 ||
    indexPath.section == 2 ||
    indexPath.section == 4 ||
    indexPath.section == 5)
{
    BLMineSectionCollectionViewCell *sectionCell = [collectionView dequeueReusableCellWithReuseIdentifier:sectionCellID forIndexPath:indexPath];
    return sectionCell;
}
else if (indexPath.section == 1)
{
    BLMineOrderCollectionViewCell *orderCell = [collectionView dequeueReusableCellWithReuseIdentifier:orderCellID forIndexPath:indexPath];
    UIColor *color = nil;
    switch (indexPath.item)
    {
        case 0:
            color = [UIColor redColor];
            break;
        case 1:
            color = [UIColor greenColor];
            break;
        case 2:
            color = [UIColor purpleColor];
            break;
        default:
            color = nil;
            break;
    }
    orderCell.iconImageView.backgroundColor = color;
    orderCell.textLabel.backgroundColor = color;
    return orderCell;
}
else
{
    UIColor *color = nil;
    color = [UIColor blueColor];
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:normalCellID forIndexPath:indexPath];
    cell.contentView.backgroundColor = color;
    return cell;
}

请指出我的错误,谢谢!

1 个答案:

答案 0 :(得分:0)

实际上UICollectionView在“重复使用”策略方面与UITableView略有不同。

当向上和向下滚动时,UITableView会在每次有新单元格进入屏幕区域时触发layoutSubviews,而UICollectionView则不会。{/ p>

这就是为什么有些UICollectionViewCell没有显示上面的完整子视图。

我所做的是手动向单元格对象发送setNeedsLayout消息以触发其layoutSubviews方法。