TableView with Cells,每个都有ImageView。 我使用SDWebImage加载图像并且工作正常,但是当我快速滚动时 - 我看到单元格中的图像在它成为正确的图像之前会改变几次。
为什么会这样?我该怎么办?
P.S。我尝试使用或不使用占位符相同的结果
imageView.sd_setImage(with: URL(string : myImageURL), placeholderImage: UIImage(named: "default.jpg"))
答案 0 :(得分:2)
在prepareForReuse()中尝试添加:
imageView.sd_cancelCurrentImageLoad()
它将取消之前的图像下载,然后它就不会发生。
另外,我建议将sd_setImage与完成块一起使用,这样你也可以确保它正确加载。
答案 1 :(得分:1)
首先,您可以使用SDWebImage
的占位符图片。
imageView.sd_setImage(with: URL(string: "http://www.domain.com/path/to/image.jpg"), placeholderImage: UIImage(named: "placeholder.png"))
其次,您可以在重复使用单元格时清理图像。
class YourCell: UITableViewCell {
override prepareForReuse() {
// sample code
imageView.image = nil
}
}
答案 2 :(得分:1)
好吧,请编辑你的投票,这是我的答案:
// This will prevent sdwebimage load wrong url
guard let imgUrl = "Your image url.jpg" else { return }
imageView.sd_setImage(with: URL(string: imgUrl), placeholderImage: UIImage(named: "Your placeholder image.png"))
// Or you can match the url using this code, so the downloader won't catch the wrong url
if imgUrl == "Your image url" {
imageView.sd_setImage(with: URL(string: imgUrl), placeholderImage: UIImage(named: "Your placeholder image.png"))
}
// This is will clean your UIImageView, and cancel download progress when cell is not visible (will reuse)
class YourCell: UITableViewCell {
override prepareForReuse() {
imageView.sd_cancelCurrentImageLoad()
imageView.image = nil
}
}
这应该可以解决问题 如果这还没有解决您的问题,请提供更多代码,例如您在索引路径的cellForRow中的代码......
答案 3 :(得分:0)
使用
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! NewsTableViewCell
而不是
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! NewsTableViewCell
希望它能解决你的问题。由于Cell的可重用性,它正在重复