Как динамично изменить размер высоты UITableViewCell

У меня есть классический сгруппированный UITableView с доступным для редактирования UITextViews в каждой ячейке. Этот текст просматривает, может быть единственным или мультивыровненным, и я хочу, чтобы ячейка увеличила свою высоту, как пользователь пишет, и текст запускает новую строку.

Мой вопрос: я должен перезагрузить целую таблицу только для увеличения высоты ячейки? Нет ли никакой другой метод?

Я искал много, и предыдущие ответы и учебные руководства просто говорят о том, как вычислить текстовую высоту, как реализовать heightForRowAtIndexPath... вещи, которые я уже знаю. Мое беспокойство - то, что, для достижения, что я хочу я должен буду вычислить высоту и перезагрузить таблицу каждый раз, когда пользователь вводит новый символ, который я не нахожу очень чистыми или эффективными.

Спасибо.

57
задан araid 18 June 2010 в 11:56
поделиться

2 ответа

Не всегда нужно перезагружать всю таблицу. Вместо этого можно просто перезагрузить одну строку.

[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
62
ответ дан 24 November 2019 в 19:14
поделиться

Чтобы быть более точным, да, вы должны реализовать tableView:heightForRowAtIndexPath: для вычисления новой высоты, затем сделать, как говорит rickharrison, и вызвать [tableView reloadRowsAtIndexPaths:withRowAnimation]. Допустим, ваши ячейки могут иметь расширенную высоту и обычную высоту, и вы хотите, чтобы они увеличивались при нажатии на них. Вы можете сделать:

-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*) indexPath 
{
    if ([expandedPaths containsObject:indexPath]) {
        return 80;
    } else {
        return 44;
    }
 }

-(void)tableView:(UITableView*) didSelectRowAtIndexPath:(NSIndexPath*) indexPath
{
    [expandedPaths addObject:indexPath];
    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
27
ответ дан 24 November 2019 в 19:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: