Ejemplo completo de 2019 para copiar y pegar
Primero configure "Agrupado" en el guión gráfico: tiene que suceder en el momento inicial, realmente no puede configurarlo más tarde, por lo que es más fácil recordar hacerlo en el guión gráfico:
Próximo,
Debe implementar heightForHeaderInSection debido a un error de Apple.
func tableView(_ tableView: UITableView,
heightForHeaderInSection section: Int) -> CGFloat {
return CGFloat(70.0)
}
Todavía hay un error de Apple, durante diez años, donde simplemente no mostrará el primer encabezado (es decir, el índice 0) si no tiene heightForHeaderInSection
llamada.
Entonces, tableView.sectionHeaderHeight = 70
simplemente no funciona, está roto .
Establecer un marco no logra nada:
En viewForHeaderInSection
simplemente crear un UIView ().
No tiene sentido / no logra nada si UIView (marco ...) ya que iOS simplemente establece el tamaño de la vista según lo determinado por la tabla.
Entonces, la primera línea de viewForHeaderInSection
será simple let view = UIView()
y esa es la vista que devuelve.
func tableView(_ tableView: UITableView,
viewForHeaderInSection section: Int) -> UIView? {
let view = UIView()
let l = UILabel()
view.addSubview(l)
l.bindEdgesToSuperview()
l.backgroundColor = .systemOrange
l.font = UIFont.systemFont(ofSize: 15)
l.textColor = .yourClientsFavoriteColor
switch section {
case 0:
l.text = "First section on screen"
case 1:
l.text = "Here's the second section"
default:
l.text = ""
}
return view
}
Eso es todo, cualquier otra cosa es una pérdida de tiempo.
Otro problema de Apple "quisquilloso".
La extensión de conveniencia utilizada anteriormente es:
extension UIView {
// incredibly useful:
func bindEdgesToSuperview() {
guard let s = superview else {
preconditionFailure("`superview` nil in bindEdgesToSuperview")
}
translatesAutoresizingMaskIntoConstraints = false
leadingAnchor.constraint(equalTo: s.leadingAnchor).isActive = true
trailingAnchor.constraint(equalTo: s.trailingAnchor).isActive = true
topAnchor.constraint(equalTo: s.topAnchor).isActive = true
bottomAnchor.constraint(equalTo: s.bottomAnchor).isActive = true
}
}
tableView:titleForHeaderInSection:
?