【发布时间】:2019-01-18 06:55:29
【问题描述】:
我正在使用Kingfisher 下载和缓存远程图像。
我想在UITableViewCell 中渲染这些图像
目前图像在我滚动之前不会显示。
我怀疑这是因为初始图像大小为零,一旦我滚动单元格就会重绘并渲染图像。
为了解决这个问题,我在 Kingfisher 的完成处理程序中调用了 tableView.reloadRows(at: [indexPath], with: .none)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "FeedTableViewCellId", for: indexPath) as! FeedGifCell
let url = URL(string: items[indexPath.item])!
let imageView = ImageResource(downloadURL: url, cacheKey: "\(url)-imageview")
let placeHolderImage = UIImage.from(hex: "ffffff").resize(width: 1, height: 190)
cell.gifImage.kf.setImage(with: imageView, placeholder: placeHolderImage) { _ in
tableView.reloadRows(at: [indexPath], with: .none)
}
return cell
}
我已经应用了一个固定高度和宽度的简单占位符,以便在应用图像之前为单元格提供一些高度。
我不确定这是不是最好的方法,我不喜欢打电话给tableView.reloadRows(at: [indexPath], with: .none) 这感觉有点.....hacky。
此外,在重绘单元格之前,我有空白区域、占位符,然后在应用正确的图像/大小时跳转。
在应用图像之前,是否可以简单地阻止单元格可见?
【问题讨论】:
-
gifImage是imageView,.kf是KingFisher库下载图片。
-
gifImage 是我单元格中的
UIImageView,.kf是 Kingfisher 提供的用于将图像加载到视图中的扩展 -
这是您可以使用的工作代码。 stackoverflow.com/a/51746517/10150796
标签: ios swift uitableview kingfisher