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;
}
我使用以下代码将图像从数组添加到 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;
}