我使用SDWEBImage库在tableview下的scrollview中显示图像。
我的问题是,图像完全加载,但是当我滚动tableview时,前一个单元格中的华丽图像或复制图像显示在Imageview中。我以编程方式创建了如下图像视图:
我的代码如下:
for (NSString *stringurl in [[[Arr objectAtIndex:indexPath.row]valueForKey:@"sports"]valueForKey:@"image"]) {
UIImageView *yourImageView =[[UIImageView alloc] initWithFrame:CGRectMake(x,10,40,40)];
NSURL *urlimg=[NSURL URLWithString:stringurl];
[yourImageView sd_setImageWithURL:urlimg
placeholderImage:[UIImage imageNamed:@"placeholder"] options:indexPath.row ? SDWebImageRefreshCached : 0];
[cell.arenaimgscroll addSubview:yourImageView];
x = x + 50;
if (stringurl==NULL) {
cell.arenaimgscroll.hidden=YES;
}
else{
cell.arenaimgscroll.hidden=NO;
}
}
答案 0 :(得分:0)
只是简短的概述,所以你得到答案
UITableView经过高度优化,因此只在内存中保留屏幕上可见的行。现在,所有行单元格都缓存在池中并被重用而不是重新生成。每当用户滚动UITableView时,它会在Pool中添加刚刚隐藏的行,并重新使用它们作为可见行。
所以,现在,回答你的问题
滚动UITableView时,会为每个indexPath再次调用UITableView数据源方法,因此dequeueReusableCellWithIdentifier会为您提供已添加UIImageView的缓存单元格,但是 你再次添加UIImageView(资源来源)
更好的解决方案 在界面构建器中添加imageView
或
您可以检查,如果已添加imageView,则跳过再次添加它的步骤
<强>更新强>
注意 :此解决方案未进行优化,因为您尚未重复使用图片元素,但会解决您的问题。
将此脚本添加到for循环上方,这是用于从滚动视图(arenaimgscroll)清除旧图像(已重用):
[cell.arenaimgscroll.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
for (NSString *stringurl in [[[Arr objectAtIndex:indexPath.row]valueForKey:@"sports"]valueForKey:@"image"]) {
//YOUR CODE
}