ios - UICollectionViewCell 中的图像被另一个 Cell 中的图像替换

标签 ios swift uicollectionviewcell

有一种情况,我将图像、PDF 和 YouTube URL 上传到服务器,完成后,这些项目将显示在 UICollectionView 中。图像按原样显示,对于 PDF,有一个图标,对于视频,则有缩略图。如果我先上传图像,然后上传 pdf,然后上传 YouTube URL,则在 collectionView 中,带有 pdf 图标的单元格将被图像替换。我正在使用Kingfisher用于从网络下载和缓存图像。

这是我的 collectionViewCell 代码。

override func prepareForReuse() {
    self.imageView.image  = nil
}

func configure(doc: GenericSubmissionDoc) {
    switch doc.type {
    case .document:
        self.imageView.image = UIImage(named: "Pdf-icon")
    case .image:
        self.imageView.setImageFromUrl(urlString: doc.url)
    case .video:
        self.imageView.contentMode = .scaleAspectFit
        guard let thumbnailLink = doc.videoThumbnailUrl else {
            self.imageView.image = UIImage(named: "youtube")
            return
        }
        self.imageView.setImageFromUrl(urlString: thumbnailLink, placeHolder: UIImage(named: "Node-Placeholder"))
    }
}

最佳答案

我猜您需要在 prepareForReuse 中取消图像下载 - 仅将图像设置为 nil 不会这样做。

考虑以下场景:

  • 单元格用作图像视频单元格,触发图像下载
  • 在下载完成之前,单元格将被重新用作文档单元格,并且您设置Pdf-icon图像(之前的下载仍在运行!)<
  • 下载完成后,它将用下载的图像替换 PDF 图标。

关于ios - UICollectionViewCell 中的图像被另一个 Cell 中的图像替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51998823/

相关文章:

iphone - 'a' 链接不适用于 iPhone Safari 中的 html5 视频标签

ios - 覆盖方法 `GetSizeForItem` 返回 "no suitable method found to override"

iOS 在 UITextView 中的单词后放置光标

iOS QLPreviewController 显示 pdf 保存到文件系统

ios - 将内部类属性的数据类型与其相应的数据类型进行比较

ios - Swift:将 [A, B, B, B, A, B, B, B] 数组转换为哈希数组 [ [A: [B, B, B], [A: [B, B, B] ] ]

ios - iOS-选择模型类别

ios - UICollectionViewCell 内容未拉伸(stretch)

swift - 如何使 Collection View 中的一个单元格的高度与屏幕减去导航高度相同。酒吧?

iOS UIView 渲染到 UIImage - Apple 的示例代码只工作一次