滚动后 UICollectionViewCells 子视图呈现错误

Posted

技术标签:

【中文标题】滚动后 UICollectionViewCells 子视图呈现错误【英文标题】:UICollectionViewCells subview rendered wrong after scrolling 【发布时间】:2012-12-20 13:41:50 【问题描述】:

我子类化的 CollectionViewCell 只包含一个 UILabel。 为了获得网格,我将带有 CGRectInset 的 UILabel 添加到单元格中。

- (id)initWithFrame:(CGRect)frame 
    self = [super initWithFrame:frame];
    if (self) 
        self.backgroundColor = [UIColor orangeColor];
        self.label = [[UILabel alloc] initWithFrame:CGRectInset(self.bounds, 1.0, 1.0)];
        self.label.numberOfLines = 0;
        self.label.layer.shouldRasterize = true;
        [self addSubview:self.label];
    
    return self;

根据要求

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
    NSLog(@"indexPathSection: %i in row: %i", indexPath.section, indexPath.row);
    MyCVCell *cell = (MyCVCell*)[collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];

    NSString *str = [NSString stringWithFormat:@"%@", [[self.cData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]];
    cell.label.text = str;

    return cell;

在我滚动之前,一切看起来都很好。任何想法可能是什么原因?

滚动前 向下滚动 向上滚动

【问题讨论】:

请从cellForItemAtIndexPath发布您的代码。 @0x7fffffff 将其添加到问题中 尝试将您的子视图添加到单元格 contentView 而不是直接添加到单元格中? @wattson12 试过了,没有任何改变 你有没有解决过这个问题,或者至少想出了一些对你有用的东西? 【参考方案1】:

问题是单元格中的子视图没有调整大小。最简单的解决方案(至少对于 UILabels)是将 autoresizingmask 设置为: UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight。

【讨论】:

啊谢谢白毫。我希望你有一个自动布局的答案,但无论如何很高兴看到你解决了它。

以上是关于滚动后 UICollectionViewCells 子视图呈现错误的主要内容,如果未能解决你的问题,请参考以下文章

除非滚动,否则 UICollectionViewCells 不会加载

水平滚动时如何左对齐 UICollectionViewCells?

如何实现显示“有状态”内容的 UICollectionViewCells?

在横向上消失的 UICollectionViewCells

用 UICollectionView 和 UICollectionViewCells 创建刷卡栈?

调整 UICollectionViewCells 的大小以始终填充 UICollectionView