Как изменить высоту uitableviewcell после tableView.reloadData

Я работаю над Twitter-подобным клиентом, и есть представление списка сообщений, реализованное UITableView. Для каждой ячейки может потребоваться загрузить изображение с динамическим размером, а изображение будет загружено async. Таким образом, размер изображения неизвестен при загрузке таблицы.

Возможно ли обновить высоту uitableviewcell после загрузки изображения.

Насколько мне известно, единственный способ обновить высоту заключается в следующем методе: - (CGFloat) tableView: (UITableView *) tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath Но он просто вызывается при загрузке данных в первый раз. Это разумно из соображений эффективности. Во всяком случае, есть способ изменить высоту позже?

Спасибо за любую информацию!

Наконец, я использовал "reloadRowsAtIndexPaths" для обновления определенных строк, вы можете попробовать это для скрытых ячеек.

[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:toReloadRows withRowAnimation: UITableViewRowAnimationNone];
[self.tableView endUpdates];

Но клетка дрожит при обновлении высоты видимых ячеек. Поэтому лучше всего подсчитать высоту ячейки.

Ответ 1

heightForRowAtIndexPath: фактически вызывается снова, когда вы выполняете reloadData (вы можете установить контрольную точку для проверки). Все, что вам нужно сделать, это установить условную логику, в которой вы нуждаетесь.

Ответ 2

Попробуйте вызвать пустой блок обновления:

[self.tableView beginUpdates];
[self.tableView endUpdates];

Это похоже на видимые ячейки. Я все еще борюсь со скрытыми ячейками.

Ответ 3

[tableView reloadData];

сделает то, что захочет. Он перезагрузит всю таблицу datasource. Таким образом, u может установить rowHeight соответственно