无法在成功下载图像时重新加载集合视图

时间:2018-01-13 15:58:30

标签: ios uicollectionview sdwebimage

我正在编辑一条包含一些文字信息和图片的记录。当我获取图像URL时,我正在使用SDWebImage下载图像,然后显示在collectionView中,并且它可以垂直滚动。因此,当加载视图时,我在viewDidLoad

中执行此操作
for (index, _) in mediaFiles.enumerated()
                {

               let img = UIImageView()

            if let url = NSURL(string: "\(baseURLGeneral)\(mediaFiles[index].imageFile ?? "")")
            {
                print(url)

                img.sd_setShowActivityIndicatorView(true)
                img.sd_setIndicatorStyle(.gray)

                img.sd_setImage(with: url as URL, placeholderImage: nil, options: .refreshCached, completed: { (loadedImage, error, cache, url) in

                self.imagesArray.append(loadedImage!)

                DispatchQueue.main.async
                 {
                    self.photoCollection.reloadData()
                 }
                })

            }
    }

根据我的理解,此代码是从web下载图像,当图像加载时,它将图像添加到我已声明为imageArray的{​​{1}}中,然后重新加载集合视图。

由于这是编辑屏幕,因此用户还可以在var imagesArray: [UIImage] = []中添加更多图像,这些图像将与下载的图像一起显示在同一阵列中,并且还可以删除图像。

根据imagesArray委托和dataSource,所以我在collectionView返回return imagesArray.count

在制作单元格变量后的numberOfItemsInSectioncellForItemAt

问题我在cell.imageAddedByUser.image = imagesArray[indexPath.row] viewDidLoad()下载图片后没有刷新。但是,如果我collectionView然后pop查看控制器,则会显示图像。

2 个答案:

答案 0 :(得分:0)

尝试在主队列中分发

  DispatchQueue.main.async
 {
     self.photoCollection.reloadData()
 }

答案 1 :(得分:0)

  1. 尝试在viewDidAppear()
  2. 中调用它

    DispatchQueue.main.async { self.photoCollection.reloadData() }