Возможно, дубликат, но я не смог найти конкретный вопрос по SO, поэтому вот он.
Мне интересно узнать о динамическом изменении высоты для всех строк, как правило, потому что вы не знаете длину строки NSString, используемой для метки.
Я знаю, что вы должны использовать этот метод делегата для изменения высоты строк:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
Проблема в том, что этот метод-делегат называется ДО создания ячейки (т.е. вызывается до cellForRowAtIndexPath
).
Итак, я подумал о том, чтобы создать фиктивную ячейку в viewWillAppear
и метод, который добавляет высоту ячейки к массиву, который сопоставляется с источником данных табличного представления (который в моем случае также является массивом).
viewWillAppear
реализует этот важный метод для получения высоты:
[NSString sizeWithFont: constrainedToSize: lineBreakMode:]
Тогда в heightForRowAtIndexPath
я могу вернуть высоту ячейки так:
//cellHeights is an ivar populated in viewWillAppear
return [[cellHeights objectAtIndex:indexPath.row] floatValue];
Мне было интересно, есть ли лучший способ динамического изменения высоты строки?
Я понимаю, что это приведет к снижению производительности для большого количества строк (я думаю, больше 1000). Но в моем случае мои строки никогда не приблизятся к этому числу. Таким образом, снижение производительности незначительно.
Заранее спасибо!