#ios #swift #ios15
Вопрос:
До iOS 15 после того, как я сделал
self.tableView.beginUpdates()
self.tableView.endUpdates()
был вызван метод heightForRowAtIndexPath, и высота моей ячейки изменилась без перезагрузки данных в ячейке. Теперь в iOS 15 это не работает! Как я могу принудительно перезагрузить высоту ячейки tableview без перезагрузки данных в этой ячейке?
Комментарии:
1. Абсолютно та же проблема. Нашел его всего несколько минут назад. Временно замените beginUpdated() и endUpdates() на reloadData (), пока я не найду решение
2. Вам потребуется предоставить дополнительную информацию о своем коде. Быстрый тест, и он работает, как и ожидалось, для меня.
3. Примечание сбоку… В документах Apple говорится: «Используйте этот
performBatchUpdates(_:completion:)
метод вместо этого, когда это возможно».4. @DonMag , performBatchUpdates(_:завершение:) также не работает
5. У меня еще нет устройства, обновленного до iOS 15, но это отлично работает на симуляторе iPhone: pastebin.com/PgWPN6QX
Ответ №1:
Я уже решил эту проблему. По-видимому, Apple изменила способ обработки обновлений и настройки размеров ячеек.
Поскольку «скрытая» ячейка остается на 0, при отправке beginUpdate
она обрабатывает только те ячейки , значение которых больше 0, поэтому она больше не корректирует их.
Что вам нужно сделать, так это изменить значение 0, возвращаемое для скрытых ячеек, на 0,01, и все готово!
Я надеюсь, что это решение сработает так же и для меня.
Ответ №2:
Нашел решение:
- В методе heightForRowAtIndexPath возвращает размер ячейки UITableView.automaticDimension вместо размера
- Внутри моей пользовательской ячейки TableView я добавил ограничение по высоте в представление контейнера (в моем случае это WebView).
- В месте, где я получаю размер ячейки и мне нужно обновить высоту (для меня после загрузки содержимого WebView), я обновляю противопоказание по высоте:
.
cell.heightContraint.constant = size
self.tableView.beginUpdates()
self.tableView.endUpdates()
Таким образом, ячейка теперь авторезизуема с помощью UITableView.Высота автоматического размера и, конечно, ваш вид/представление контейнера должны иметь ограничения сверху и снизу, равные ограничениям сверху и снизу ячейки