Изменение длины текста 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
}