Как принудительно задать высоту ячейки в UITableView?

«Как принудительно задать высоту ячейки в UITableView?» — вопрос из категории UIKit, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Высоту ячейки можно задать явно, реализовав метод делегата tableView(_:heightForRowAt:). Это позволяет управлять высотой программно, независимо от содержимого ячейки.

Пример явного задания высоты:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    // Задаем разную высоту в зависимости от секции или строки
    switch indexPath.section {
    case 0:
        return 44.0 // Стандартная высота
    case 1:
        return indexPath.row % 2 == 0 ? 60.0 : 80.0 // Разная высота
    default:
        return UITableView.automaticDimension // Автоматическая высота
    }
}
Сравнение подходов: Способ Метод Когда использовать
Явная высота tableView(_:heightForRowAt:) Когда высота известна заранее и фиксирована или легко вычисляется. Высокая производительность.
Автоматическая высота tableView.estimatedRowHeight + UITableView.automaticDimension + Auto Layout в ячейке Когда высота зависит от динамического контента (текст, изображения). Может быть менее производительным.

Как обновить высоту после изменения? Чтобы таблица пересчитала и анимировала изменение высоты, нужно обновить данные с помощью beginUpdates()/endUpdates():

// 1. Изменить данные, влияющие на расчет высоты.
// 2. Запросить обновление таблицы.
tableView.beginUpdates()
tableView.endUpdates()
// Метод heightForRowAt будет вызван заново для видимых ячеек.

Важно: Для максимальной производительности при использовании heightForRowAt: рекомендуется кешировать рассчитанные значения высот, особенно если их расчет требует ресурсов.