В моем случае я использовал фиксированный размер заголовка для каждого раздела, но с динамически размером ячейки в каждом заголовке.
Высота ячейки зависит от высоты метки.
Работа с:
tableView.estimatedRowHeight = SomeNumber
tableView.rowHeight = UITableViewAutomaticDimension
Работает , но при использовании:
tableView.reloadSections(IndexSet(integer: sender.tag) , with: .automatic)
когда много заголовков не свернуто, создает много ошибок, таких как дублирование заголовка (тип заголовка x ниже того же типа) и странные анимации, когда платформа перезагружается с анимацией, даже при использовании с типом .none
(FYI , фиксированная высота заголовка и высота ячейки).
Решение заключается в использовании обратного вызова heightForRowAt
и вычислении высоты метки самим собой (плюс анимация выглядит намного лучше). Помните, что высота называется first .
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
let object = dataDetailsController.getRowObject(forIndexPath: indexPath)
let label = UILabel(frame: tableView.frame)
let font = UIFont(name: "HelveticaNeue-Bold", size: 25)
label.text = object?.name
label.font = font
label.numberOfLines = 0
label.textAlignment = .center
label.sizeToFit()
let size = label.frame.height
return Float(size) == 0 ? 34 : size
}