UICollectionView + SDWebImage +单元重用

我有一个UICollectionView与自定义的UICollectionViewCell类,它添加了另一个UIView(thumbnailView)到它的contentView。 该另一个视图具有UIImageView属性(imageView),其图像异步加载SDWebImage。 这一切都正常工作,直到单元格被重新使用,而原始单元格的图像仍在加载。 如果通过CollectionView图像快速滚动,就会在不应该出现的单元格中弹出(可能是因为单元格被重用并且图像下载会在此后结束),只要正确的图像被重新使用单元完成加载。

为了解决这个问题,我将下面的代码添加到了我的UICollectionViewCell子类中,以停止原始单元格的图像下载:

- (void)prepareForReuse
{
    [super prepareForReuse];
    [self.thumbnailView.imageView cancelCurrentImageLoad];
}

但令我惊讶的是,这似乎完全没有改变。 我做错了什么,或者我只是看错了方向?


如果我正确理解你的问题,你会得到旧图像仍然出现在重复使用的单元格中,因此除了停止以前的图像加载之外,您可能还想从imageView中删除旧图像。 SDImageView可能有一个方法来清除图像,否则你可以手动将其替换为占位符图像。

- (void)prepareForReuse
{
    [super prepareForReuse];
    [self.thumbnailView.imageView cancelCurrentImageLoad];
    [self.thumbnailView.imageView setImage:<<LOCAL PLACEHOLDER IMAGE>> forState:UIControlStateNormal];
}

UITableViewDelegateUICollectionViewDelegate方法-tableView:didEndDisplayingCell:forRowAtIndexPath:是最好的地方来更新你的UITableView | UICollectionView细胞消失后。 您可以取消单元格下载。


我尝试了didEndDisplayCell()和prepareForReuse(),他们都没有工作。 一个工作方式是将imageView.image设置为零,然后分配给特定图像,然后它不会将旧图像作为背景闪烁。 (但由于必须先做“干净”的工作,速度会比较慢)。

链接地址: http://www.djcxy.com/p/91637.html

上一篇: UICollectionView + SDWebImage + Cell reuse

下一篇: UICollectionView auto scroll to cell at IndexPath