Ответ 1
heightForRowAtIndexPath: фактически вызывается снова, когда вы выполняете 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];
Но клетка дрожит при обновлении высоты видимых ячеек. Поэтому лучше всего подсчитать высоту ячейки.
heightForRowAtIndexPath: фактически вызывается снова, когда вы выполняете reloadData (вы можете установить контрольную точку для проверки). Все, что вам нужно сделать, это установить условную логику, в которой вы нуждаетесь.
Попробуйте вызвать пустой блок обновления:
[self.tableView beginUpdates];
[self.tableView endUpdates];
Это похоже на видимые ячейки. Я все еще борюсь со скрытыми ячейками.
[tableView reloadData];
сделает то, что захочет. Он перезагрузит всю таблицу datasource
. Таким образом, u может установить rowHeight
соответственно