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