SDWebImage
是 UIImageView
的扩展。有一个方法:
sd_setImageWithURL(NSURL(string: url), placeholderImage: placeholder, options: options, completed: { image, error, cache, url in
//do sth after it is completed
})
但是在 completed
block 中,我无法决定是否允许 SDWebImage
分配图像。 它是自动分配的,无需询问开发人员是否允许执行此操作。当我在滚动表格时将图像分配给 UITableViewCell
内的 UIImageView
时出现问题.
很明显,在下载完成之前,该单元格可能会被重新用于不同的行,最终可能会出现不同的图像。
如何使用这个库修复它?
在以下问题中:Async image loading from url inside a UITableView cell - image changes to wrong image while scrolling , 有一个答案说 SDWebImage
解决了这个问题,但事实并非如此,或者我错过了某事。
最佳答案
这应该不是必需的。如果你查看 UIImageView 类别的实现,你会看到:
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
[self sd_cancelCurrentImageLoad];
objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
这向您展示的是,在您调用 setImage 的那一刻,它取消了与 ImageView 实例关联的下载。由于 UITableView 重用了它的 View ,所以这应该不是问题。查看他们如何将 imageView 和 URL 关联在一起。
您的问题可能是您没有每次都将 imageView 的图像属性重置为 nil。所以在 cellForRow 里面你可能想要:
cell.imageView.image = nil
cell.imageView.sd_setImageWithURL(...)
关于ios - 一旦使用 SDWebImage 下载完成,如何决定是否将图像分配给 UIImageView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34173323/