У меня есть UITableView с несколькими разделами. В одном разделе содержатся ячейки, которые будут изменяться как пользовательский тип текста в UITextView. В другом разделе содержатся ячейки, которые отображают содержимое HTML, для которых расчет высоты относительно дорог.
Прямо сейчас, когда пользователь вводит в UITextView, чтобы получить представление таблицы для обновления высоты ячейки, я вызываю
[self.tableView beginUpdates];
[self.tableView endUpdates];
Однако это приводит к тому, что таблица пересчитывает высоту ячейки каждую в таблице, когда мне действительно нужно только обновить ячейку одиночная, на которую была введена. Не только это, но вместо пересчета расчетной высоты с помощью tableView:estimatedHeightForRowAtIndexPath:
, она вызывает tableView:heightForRowAtIndexPath:
для каждой ячейки, даже те, которые не отображаются.
Можно ли запросить представление таблицы обновить только высоту одной ячейки, не выполняя всю эту ненужную работу?
Обновление
Я все еще ищу решение для этого. Как я уже сказал, я пытался использовать reloadRowsAtIndexPaths:
, но похоже, что это не сработает. Вызов reloadRowsAtIndexPaths:
с хотя бы одной строкой будет по-прежнему вызывать heightForRowAtIndexPath:
для каждой строки, даже если cellForRowAtIndexPath:
будет вызываться только для запрошенной строки. На самом деле, это выглядит как любое время, когда строка вставлена, удалена или перезагружена, heightForRowAtIndexPath:
вызывается для каждой строки в ячейке таблицы.
Я также попытался поместить код в willDisplayCell:forRowAtIndexPath:
, чтобы вычислить высоту непосредственно перед тем, как ячейка появится. Чтобы это работало, мне нужно было заставить табличное представление повторно запросить высоту для строки после выполнения вычисления. К сожалению, вызов [self.tableView beginUpdates]; [self.tableView endUpdates];
из willDisplayCell:forRowAtIndexPath:
вызывает исключение индекса за пределами исключения в внутреннем коде UITableView. Думаю, они не ожидают, что мы это сделаем.
Я не могу не чувствовать, что это ошибка в SDK, которая в ответ на [self.tableView endUpdates]
не вызывает estimatedHeightForRowAtIndexPath:
для ячеек, которые не видны, но я все еще пытаюсь найти какой-то вид обходного пути. Любая помощь приветствуется.