滚动后的单元格在图像上显示图像

Posted

技术标签:

【中文标题】滚动后的单元格在图像上显示图像【英文标题】:Cell after scroll show image over image 【发布时间】:2014-12-25 14:28:34 【问题描述】:

我有 tableview,我想显示目录内一个文件夹中的所有图像,并且我有该目录的路径。我正在将图像加载到单元格中:

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath 

    for (UIView * view in cell.contentView.subviews)
        if ([view isKindOfClass:[UIButton class]]) 
            [view removeFromSuperview];
        
    

    cell.imageView.image = nil;
    cell.accessoryType = UITableViewCellAccessoryNone;

    NSData *imgData = [NSData dataWithContentsOfFile:absoluteImagePath];
    UIImage *thumbNail = [[UIImage alloc] initWithData:imgData];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:thumbNail];            
    [cell insertSubview:imageView atIndex:0];

但是当我向上和向下滚动时,我会在单元格内的图像上显示图像(旧图像在新图像下方可见,例如当我滚动到第一个位置时,我会在其他图像下方看到索引 0 的图像)。 有谁知道有什么问题,我是这个 ios 编程的新手?

【问题讨论】:

【参考方案1】:

你应该

子类化你的单元格, 为图片创建一个出口,然后 在情节提要中设计布局。

好处:

无需检查(cell==nil) 您将需要编写更少的代码 没有冗余视图创建错误的更简洁的解决方案

【讨论】:

或者,您可以只使用UITableViewCellimageView 属性。 @RinatKhanov 是的,但 OP 对图像视图的外观和位置的控制较少(可能不够)。【参考方案2】:

当重复使用单元格时,[cell insertSubview:imageView atIndex:0]; 会向该单元格添加一个额外的UIImageView。建议创建一个自定义UITableViewCell 并在prepareForReuse 方法中删除UIImageView。识别要删除的UIImageView 的一种简单方法是向其添加tag。例如,

imageView.tag = 1000;

然后你可以找到图像视图

UIImageView *imageView = [self.contentView viewWithTag:1000];
if (imageView) 
    [imageView removeFromSuperview];

【讨论】:

【参考方案3】:

声明要在其中初始化单元格的 UIImageView。 例如

if (cell==nil)
 
UIImageView *image = [[UIImageView alloc]initWithFrame:yourFrame];
[cell addSubView:image];

image.image = yourImage;

或者,您可以在添加新的 UIImageView 作为子视图之前从单元格中删除所有子视图。

【讨论】:

如果单元格为零添加子视图?零对象? 是的,只要尝试一下,它就会起作用。或者你可以像 mundi 说的那样子类化 UITableViewCell。

以上是关于滚动后的单元格在图像上显示图像的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewAutomaticDimension 单元格在滚动或拉动刷新后调整大小

识别 CollectionView 中的单元格

旋转后的 UIScrollViews 帧

图像的集合视图和弹出窗口上的单元格显示图像,也可以滚动查看其他图像

在显示整个表格之前使用键盘时,单元格在静态表格中消失

当异步添加新项目时,UICollectionView 快速滚动在单元格中显示错误的图像