【问题标题】:Image not loading in collection view cell图像未加载到集合视图单元格中
【发布时间】:2021-01-31 12:05:28
【问题描述】:

我以编程方式设置了一个集合视图,该视图应将来自 API 的图像显示到单元格上。但是,一旦显示单元格并调用数据,这些单元格就会保持空白。

Cells returning an empty image view

当前设置

 override func viewDidLoad() {
    super.viewDidLoad()
    collectionView.register(ImageCell.self, forCellWithReuseIdentifier: imageCellId)

    loadImageData(numberOfItems: numberOfItems)
    
}
   func loadImageData(numberOfItems: Int) {
     client.getImageData(items: numberOfItems, completion: { (error,data) in
        if error != nil {
            print("Error parsing image data")
        } else {
            self.per_page = data.perPage
            self.total_results = data.totalResults
            self.images = data.photos
           
            for image in self.images {
                self.userNameArray.append(image.photographer)
                self.urlArray.append(image.url)
                
            }
            self.imageLinkArray = self.urlArray
        
            DispatchQueue.main.async {
                self.collectionView.reloadData()
            }
        }
    })
}

 override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: imageCellId, for: indexPath) as! ImageCell
        let imageString = String(imageLinkArray[indexPath.row])
        let url = URL(string: imageString)
        let data = try? Data(contentsOf: url!)
        
        if let imageData = data {
            let imageFromDatabase = UIImage(data: imageData)
            cell.imageView.image = imageFromDatabase
        }
        
        return cell
}

试过了:

【问题讨论】:

    标签: ios swift uicollectionview uikit


    【解决方案1】:

    你应该使用Kingfisher作为图片缓存库

    https://github.com/onevcat/Kingfisher

    首先,将 pod 添加到您的项目中: pod 'Kingfisher'

    替换这个:

    let url = URL(string: imageString)
        let data = try? Data(contentsOf: url!)
        
        if let imageData = data {
            let imageFromDatabase = UIImage(data: imageData)
            cell.imageView.image = imageFromDatabase
        }
    

    有了这个

    let url = URL(string: imageString)
    imageView.kf.setImage(with: url)
    

    【讨论】:

    • 感谢您的回复,但我正在寻找不涉及第三方框架的解决方案。
    • 如果我可以问,为什么不使用 Kingfisher 呢?他们使用 MIT 许可证,在 github 上有 17.5k 颗星,并且有一些很酷的图像加载/缓存功能。
    • 我通常也会尝试在我的应用程序中限制第三方库,但图像缓存库可能是您在任何应用程序中使用的最高优先级库
    • 我会在他们的 repo 上阅读文档。我以前听说过翠鸟,只是从来没有花时间尝试过。
    猜你喜欢
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    相关资源
    最近更新 更多