Ответ
Автоматический расчёт высоты включается установкой UITableView.automaticDimension для свойств rowHeight и/или estimatedRowHeight.
Базовая настройка:
tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 80 // Приблизительная высота для оптимизации
Требования к autolayout в ячейке:
- Констрейнты должны полностью определять размер содержимого от верха до низа ячейки.
- Для многострочных UILabel установите:
label.numberOfLines = 0 label.setContentCompressionResistancePriority(.required, for: .vertical)
Принцип работы и оптимизация:
- Система использует
estimatedRowHeightдля предварительного вычисления размера таблицы и оптимизации прокрутки. - Фактический расчёт (
systemLayoutSizeFitting) происходит для видимых ячеек. - Для сложных ячеек кешируйте рассчитанную высоту в
tableView(_:heightForRowAt:), чтобы избежать повторных вычислений.