【发布时间】:2017-04-24 08:06:42
【问题描述】:
我有一个 CollectionView,它在加载后显示缩略图。一开始,图片并没有存储在设备上,因此它们是从服务器获取的。在从服务器获取这些图像后的回调方法中,它们的单元格没有得到更新,我需要将它们滚动到屏幕之外,然后它们会得到更新。我在另一个应用程序中有类似的机制,一切正常,我找不到区别。下面是代码的一些部分,以便更好地理解我的工作。
这是我在检查缩略图是否已从服务器获取后设置图像的代码。如果是,直接设置,如果不是,使用Alamofire检索图片,加载完成后更新。
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: self.reuseIdentifier, for: indexPath) as! PictureCollectionViewCell
/* Set thumbnail to the cell */
if let thumbnail = pictures[indexPath.row].thumbnail {
cell.imageView.image = thumbnail
} else {
pictures[indexPath.row].retrievePicture(thumbnail: true, completion: { picture in
cell.imageView.image = picture
})
}
return cell
}
如前所述,在我将单元格滚动出可见屏幕区域之前,它不会更新。 cell 或 collectionView 重新加载并没有解决问题。有什么想法吗?
提前致谢。
【问题讨论】:
-
是否调用了闭包
retrievePicture()?那是什么代码? -
当您的图像下载完成时,单元格显示已完成。您需要在集合视图上调用
reloadData()来刷新 UI。 -
下载完成运行在哪个线程上?
-
retrievePicture()只是一个 Alamofire 网络请求,加载图像并将其传递给回调方法 -
collectionView 之外的屏幕上的其他一些组件通过回调方法更新
标签: ios swift uicollectionview uicollectionviewcell