Как обновить высоту ячейки с помощью UITableViewAutomaticDimension?

У меня есть UITextView в tableViewCell, и с помощью iOS 8 предусмотрен подход UITableViewAutomaticDimension, указанный здесь.

Если пользователь добавляет новую строку в UITextView, и поэтому textView, высота ячейки должна увеличиваться, как я могу обновить высоту?

Пробовал:

cell.layoutIfNeeded()
cell.setNeedsUpdateConstraints()

Это не работает.

Если я перезаряжаю ячейку, например

tableView.reloadRowsAtIndexPaths([iindexPath], withRowAnimation: .None)

это работает, но тогда мне нужно иметь дело с отставкой и показать клавиатуру. Я бы избегал этого. Любое обходное решение?

Ответы

Ответ 1

необходимо добавить следующий метод:

func textViewDidChange(textView: UITextView) {

    tableView.beginUpdates()
    tableView.endUpdates()
}

он обновит ограничения без перезагрузки tableview

Ответ 2

После некоторого времени textView начнется прокрутка, чтобы увеличить его высоту в новой строке за все время, когда вам нужно реализовать метод textViewDidChangeText: и увеличить его высоту, вычислив высоту текста.

Чтобы использовать UITableViewAutomaticDimension, вам нужно добавить ограничения на subviews сверху вниз, я думаю, вы также должны создать и IBOutlet для ограничения высоты textView и установить постоянное значение в методе textViewDidChangeText, в этом случае tableViewCell высота будет динамически изменяться.