Изменение длины текста UILabel в UITableViewCell с динамической высотой не изменяет размер правильно

У меня есть UITableViewCell с UILabel, который правильно изменяет свою высоту в соответствии с длиной текста. Для этого я правильно установил ограничения AutoLayout и указал

tableView.rowHeight = UITableViewAutomaticDimension

Проблема, с которой я столкнулся, заключается в том, что тест UILabel удлиняется после нажатия кнопки UIB - ПРОЧИТАЙТЕ БОЛЬШЕ в самой ячейке. Я программно добавляю текст в UILabel и ожидаю, что высота ячейки будет расти. Я добавил:

    self.layoutIfNeeded()
    self.updateConstraints()

в клетке, но это не работает. Клетка остается одинаковой высоты.

Я также принудительно перезагрузил строку ячейки в делегате UIViewController, но он также не работает. Я что-то упустил здесь?

РЕДАКТИРОВАТЬ: вопрос отличается от других аналогичных вопросов, потому что я хотел бы получить ответ, чтобы избежать расчета высоты вручную. Поскольку AutoLayout прекрасно может рассчитывать правильную динамическую высоту при первой загрузке, я думаю, должен быть способ заставить ее перерисовать ячейку, как только текст в метке станет длиннее, без необходимости выполнения ручного вычисления для оценки высоты строки.

2 ответа

Решение

Я нашел решение, которое работает, после обновления содержимого UILabel, которое я звоню:

 UIView.animateWithDuration(0.3) {
     cell.contentView.layoutIfNeeded()
 }

Чтобы обновить ограничения ячейки. А затем изменить размер ячейки:

 tableView.beginUpdates()
 tableView.endUpdates()

Я буду ждать, чтобы принять этот ответ, чтобы увидеть, если кто-то еще ответит на более элегантное решение, хотя.

Get the Label height dynamically and set the tableviewcell height

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
   // Calculate the Label height and add it to default height of the cell
}
Другие вопросы по тегам