当我滚动表格视图时,tableViewCell的图像保持更改不正确的图像。
我尝试过这个。
@IBOutlet weak var imageView: UIImageView!
override prepareForReuse() {
super.prepareForReuse()
self.imageView.image = nil
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as? MyCustomCell else { return UITableViewCell() }
cell.tag = indexPath.row
if cell.tag == indexPath.row {
// download image
downloadManager.download { (image) in
cell.imageView.image = image
}
}
}
但是,滚动时此图像仍然不正确。 我该如何解决?
答案 0 :(得分:1)
您可以设置一个占位符图像来解决此问题。请使用https://github.com/onevcat/Kingfisher进行异步图片加载
if let url = URL(string: "url_of_your_image") {
imageView.kf.setImage(with: url)
}
这里是工作代码,可以使用显示 placeholder 图像从URL 下载和加载图像,以使用 NSCache < / strong>。
答案 1 :(得分:0)
一旦下载了图片(异步),您需要检查您的单元格确实与该图片相关。
例如单元可能会被其他indexPath重用,因此下载的图像不再正确。
我已经添加了index
(indexPath.row)来下载完成闭包,因此您可以检查cell.tag是否等于index
downloadManager.download(index: indexPath.row) { (image, index) in
if cell.tag == index {
cell.imageView.image = image
}
}
答案 2 :(得分:0)
尝试一下:
import UIKit
class CustomViewCell: UITableViewCell {
@IBOutlet weak var imageView: UIImageView!
private var task: URLSessionDataTask?
override func prepareForReuse() {
super.prepareForReuse()
task?.cancel()
imageView.image = nil
}
func configureWith(url string: String) {
guard let url = URL(string: string) else { return }
task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if let data = data, let image = UIImage(data: data) {
DispatchQueue.main.async {
self.imageView.image = image
}
}
}
task?.resume()
}
}