У меня есть 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: для ячеек, которые не видны, но я все еще пытаюсь найти какой-то вид обходного пути. Любая помощь приветствуется.