Я использую Kingfisher для загрузки и кэширования удаленных изображений.
Я хотел бы отобразить эти изображения в UITableViewCell
В настоящее время изображения не отображаютсяпока я не прокручиваю.
Я подозреваю, что это потому, что первоначальный размер изображения равен нулю, после прокрутки ячейка перерисовывается и изображение отображается.
Чтобы устранить эту проблему, я назвал tableView.reloadRows(at: [indexPath], with: .none)
в обработчике завершения Kingfisher
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)
это немного ..... хакерски.
Кроме того, перед перерисовкой ячейки у меня есть пробел, мой заполнитель, затем прыжокпри применении правильного изображения / размера.
Можно ли вообще запретить видимую ячейку, пока изображение не будет применено?