Как обновить высоту tableViewCell после получения изображения? - PullRequest
0 голосов
/ 12 июля 2020

Заявление об ограничении ответственности: на StackOverflow есть несколько ответов по этому поводу, но ни один из них, похоже, не решает проблему (дайте мне знать, если я пропустил какой-то ответ). с тремя элементами:

  • Заголовок
  • Подзаголовок
  • ImageView

Все динамические c (полученные с сервера) единственные проблема в том, что высота всех изображений различается.

Добавлен logi c для обновления ограничения высоты просмотра изображения в зависимости от высоты изображения, это используется logi c. Я добавил этот код в UITableViewCell

let ratio = image.size.width / image.size.height
let newHeight = imageView.frame.width / ratio
imageViewHeightConstraint.constant = newHeight
layoutIfNeeded()

Хотя он изменяет размер изображения, иногда он показывает неправильную высоту для ячейки (прикрепленное изображение ниже). Иногда высота imageView увеличивается, а изображение остается маленьким (AspectFit)

Я устанавливаю для imageView.image значение nil в файле prepareForReuse.

Пожалуйста, дайте мне знать, что происходит не так?

введите описание изображения здесь

1 Ответ

0 голосов
/ 12 июля 2020

Одна из идей - предварительно получить размер изображения с сервера - вернуть его размер в виде числа и предварительно выделить для него место в UITableView.

В противном случае вам придется перезагрузить каждую ячейку, которая будет загружать изображение после загрузка его с сервера, и это приведет к перерасчету всего макета для всего UITableView, что является довольно тяжелой операцией. В частности, если вы загрузите несколько изображений, пересчет макета для каждого сильно повлияет на производительность вашего приложения.

Принцип работы UITableView заключается в том, что он предварительно вычисляет позицию для каждой ячейки (координаты x, y) в start - положение каждой ячейки зависит от положения и размера предыдущих ячеек. Затем он сохраняет его в кэше и использует для оптимизации скорости прокрутки и повторного использования элементов внутри него. Если вы загрузите изображение для первой ячейки вверху - это повлияет на все остальные ячейки под ней - и ему придется пересчитать его. Что в вашем случае будет происходить для каждого загруженного изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...