SDWebImage是UIImageView的扩展。有一种方法:
sd_setImageWithURL(NSURL(string: url), placeholderImage: placeholder, options: options, completed: { image, error, cache, url in
//do sth after it is completed
})但是在completed块中,我无法决定是否允许SDWebImage分配图像。--它是自动分配的,无需询问开发人员是否允许这样做。当我在UITableViewCell中滚动表时,当我将图像分配给UIImageView时,会出现问题。
很明显,在下载完成之前,可能会对不同的行重用该单元格,最后可能会出现不同的图像。
如何使用这个库修复它?
在下面的问题中:Async image loading from url inside a UITableView cell - image changes to wrong image while scrolling,有一个答案是SDWebImage解决了这个问题,但这不是真的,或者我错过了什么。
发布于 2015-12-09 07:56:10
这不该是必要的。如果您查看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,它就会取消与图像视图实例相关的下载。由于UITableView重用了它的视图,这不应该是一个问题。看看他们是如何将imageView和URL联系在一起的。
您的问题可能是,您没有每次都将imageView的图像属性重置为零。因此,在cellForRow内部,您可能希望:
cell.imageView.image = nil
cell.imageView.sd_setImageWithURL(...)发布于 2015-12-09 07:56:18
启动新加载时,图像视图将取消任何当前加载。因此,如果图像视图被重用,则可以避免此问题。
如果由于某种原因没有设置新的映像,则可以调用sd_cancelCurrentImageLoad并显式设置占位符图像。
https://stackoverflow.com/questions/34173323
复制相似问题