Для изменения высоты ячейки при изменении содержимого внутри text View в Swift 4 вам необходимо выполнить следующие шаги:
1. Создайте класс наследник UITableViewCell для вашей ячейки. Предположим, что ваш класс называется CustomTableViewCell.
class CustomTableViewCell: UITableViewCell { @IBOutlet weak var textView: UITextView! override func awakeFromNib() { super.awakeFromNib() // Настройте делегата для textView, чтобы отслеживать изменения textView.delegate = self } } // Расширение класса для реализации делегата UITextViewDelegate extension CustomTableViewCell: UITextViewDelegate { func textViewDidChange(_ textView: UITextView) { // Вызывается каждый раз, когда текст в textView изменяется // Обновите таблицу, чтобы перерисовать ячейку с новой высотой tableView?.beginUpdates() tableView?.endUpdates() } }
2. Добавьте UITextView на вашу ячейку в storyboard и соедините его с IBOutlet textView в классе CustomTableViewCell.
3. В вашем контроллере таблицы (например, в методе cellForRowAt), настройте параметры ячейки и присвойте ей высоту с использованием метода sizeThatFits. Обратите внимание, что вы также должны иметь высоту ячейки по умолчанию в свойстве estimatedRowHeight таблицы.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomTableViewCell // Настройте содержимое ячейки здесь, если необходимо // Вычислите новую высоту ячейки на основе высоты textView let newSize = cell.textView.sizeThatFits(CGSize(width: cell.textView.frame.size.width, height: CGFloat.greatestFiniteMagnitude)) // Обновите высоту ячейки cell.textView.frame.size = newSize // Обновите высоту ячейки таблицы return cell } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return UITableView.automaticDimension }
Обратите внимание, что значение свойства estimatedRowHeight таблицы должно быть установлено на достаточное число, чтобы справиться с максимальным размером вашего textView.
4. Теперь при каждом изменении текста в textView, метод textViewDidChange будет вызываться и ячейка будет перерисовываться с использованием новой высоты.