SDWebImage在tableview滚动时更改图像

时间:2017-02-12 08:01:07

标签: ios objective-c swift sdwebimage

TableView with Cells,每个都有ImageView。 我使用SDWebImage加载图像并且工作正常,但是当我快速滚动时 - 我看到单元格中的图像在它成为正确的图像之前会改变几次。

为什么会这样?我该怎么办?

P.S。我尝试使用或不使用占位符相同的结果

imageView.sd_setImage(with: URL(string : myImageURL), placeholderImage: UIImage(named: "default.jpg"))

4 个答案:

答案 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的可重用性,它正在重复