以下代码是一个非常简单的程序,用于显示UICollectionView
中1-10000的数字。它正确显示而不滚动,但如果向下滚动并向后滚动集合视图,则单元格会重叠。
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
return 1;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
return 10000;
}
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
return CGSizeMake(100,30);
}
-(UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
NSString *identifier = @"cell_id";
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
[label setText:[NSString stringWithFormat:@"%d", indexPath.item, nil]];
[cell.contentView addSubview:label];
return cell;
}
答案 0 :(得分:3)
这里的问题是标签被重复添加到视图的单元格中。重复使用单元格时不会删除旧标签,因此您会看到多个数字重叠。解决方案可以是删除像这样的旧标签
for (UIView *view in cell.contentView.subviews) {
if ([view isKindOfClass:[UILabel class]]) {
[view removeFromSuperview];
}
}
在添加到单元格之前。但是,当子视图的数量增加时,这将产生性能问题。您可以使用标签创建自定义单元格,然后更新其值。我没有尝试过,但我相信它会起作用。希望这有帮助
答案 1 :(得分:2)
这在Swift 3中对我有用: 与批准的解决方案几乎相同的解决方案,请注意我使用
cell.subViews
而不是
cell.contentView.subViews
对我有用的是:
for view in cell.subviews {
view.removeFromSuperview()
}
答案 2 :(得分:0)
将单元格层anchorPointZ设置为cellForItemAtIndexPath:方法中的行索引
cell.layer.anchorPointZ = CGFloat(indexPath.row)