在 UITableView 重新加载时从 SDWebImage 设置图像
Posted
技术标签:
【中文标题】在 UITableView 重新加载时从 SDWebImage 设置图像【英文标题】:Setting Image from SDWebImage on UITableView Reload 【发布时间】:2017-09-07 05:46:48 【问题描述】:我有一个 UITableView 中的单元格列表。图片正在通过单元格内的以下方法下载
self.profileImage.sd_setImage(with: URL(string: profileURL), completed: (image, error, cache, url) in
if image != nil
self.profileImage.image = image
else
print("didn't load image")
)
但是,在重新加载和重新加载 UITableView 时,该索引的前一个图像会被加载片刻,然后会出现该索引的更新图像。
现在我的理论是发生以下情况(如果我错了,请纠正我)...
-
检索到 URL 后立即下载图像。
该图像使用 SDWebImage 进行缓存。
TableView 重新加载,单元格中的数据发生变化。
SDWebImage 使用该 indexPath 的缓存图像而不是单元格。 (这里有问题)
SDWebImage 再次下载该单元格的 URL 并刷新图像。
如果这是正确的,我需要执行以下操作...
-
检索到 URL 后立即下载图片。
使用 SDWebImage 缓存图像。
TableView 重新加载,单元格中的数据发生变化。
使用该单元格的缓存图像。
我是否使用了错误的方法来设置 self.profileImage?
非常感谢任何帮助。
【问题讨论】:
【参考方案1】:1. 检索到 URL 后立即下载图片。 2.使用 SDWebImage 缓存图片。
你使用这个代码
let url = NSURL(string: "https://test.com/upload/image.jpg")!
self.imageD.sd_setImage(with: url as URL!, placeholderImage: UIImage(named: "default_logo"), options: .transformAnimatedImage, progress: nil, completed: nil)
这个 default_logo 放在 Assets.xcassets
3.TableView 重新加载,单元格中的数据发生变化。
self.tableView.reloadData()
【讨论】:
这将删除下载的图像并将其替换为占位符图像。但是,当 UITableView 重新加载时,它可以完美地工作。你知道我如何让它们在 viewDidLoad 时显示吗? 没关系,只是将 self.profileImage.image = image 卡在完成块中似乎现在可以工作了。【参考方案2】:如果您使用 UITableViewCell 配置单元格,则可以覆盖方法 prepareForReuse() 以清除旧图像,例如:
override func prepareForReuse()
super.prepareForReuse()
profileImage.image = nil
这样就不会出现旧的缓存图片了。
【讨论】:
以上是关于在 UITableView 重新加载时从 SDWebImage 设置图像的主要内容,如果未能解决你的问题,请参考以下文章