UICollectionView 图像重新出现在单元格上

UICollectionView image re-appears on cell

我使用以下代码将图像从数组添加到 uicollectionview 单元格。

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

    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];

    UIImageView *emoji = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 50, 50)];
    emoji.image = [UIImage imageNamed:[imagePack objectAtIndex:indexPath.row]];
    emoji.contentMode = UIViewContentModeScaleAspectFit;
    [cell.contentView addSubview:emoji];

    return cell;
}

当我向下滚动然后向上滚动 UICollectionView 时,图像会重新出现在每个单元格的顶部。假设我有单元格 1 的图像 1,单元格 2 的图像 2,依此类推。如果我向下滚动然后向上滚动,在单元格 1 中我有图像 1,图像 1 的顶部是图像 2。

在我滚动之后,在滚动看起来正常之前,它弄乱了图像。

请问我做错了什么?

这是因为您正在使用细胞回收材料,所以当细胞返回给您重新使用时,您应该删除(或重新使用)任何旧的 imageView 尝试这样的事情..

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

    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];

    UIImageView *emoji = nil;

      //try to find old imageView
     for (UIView *vw in cell.contentView.subviews){
        if ([vw isKindOfClass:[UIImageView class] ]){
          emoji = (UIImageView *)vw;
        }
      }

    if (emoji==nil){
   //we failed to find an imageView...

        emoji = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 50, 50)];
        [cell.contentView addSubview:emoji];
        //creating a UIImageView only if one is not already there
    }else{
    emoji.frame = CGRectMake(0, 0, 50, 50);
    }

   emoji.image = [UIImage imageNamed:[imagePack objectAtIndex:indexPath.row]]; 
   emoji.contentMode = UIViewContentModeScaleAspectFit; 


    return cell; 

}