Esempio completo 2019 da copiare e incollare
Prima imposta "Raggruppato" sullo storyboard: deve accadere al momento dell'inizializzazione, non puoi davvero impostarlo in un secondo momento, quindi è più facile ricordare di farlo sullo storyboard:
Il prossimo,
È necessario implementare heightForHeaderInSection a causa di un bug Apple.
func tableView(_ tableView: UITableView,
heightForHeaderInSection section: Int) -> CGFloat {
return CGFloat(70.0)
}
C'è ancora un bug di Apple - da dieci anni a questa parte - in cui semplicemente non mostrerà la prima intestazione (cioè l'indice 0) se non hai una heightForHeaderInSection
chiamata.
Quindi, tableView.sectionHeaderHeight = 70
semplicemente non funziona, è rotto .
L'impostazione di una cornice non ottiene nulla:
In viewForHeaderInSection
semplicemente creare un UIView ().
È inutile / non ottiene nulla se UIView (frame ...) poiché iOS imposta semplicemente le dimensioni della vista come determinato dalla tabella.
Quindi la prima riga viewForHeaderInSection
sarà semplicemente let view = UIView()
e questa è la vista che ritorni.
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
}
Ecco fatto: qualsiasi altra cosa è una perdita di tempo.
Un altro problema "pignolo" di Apple.
L'estensione di convenienza utilizzata sopra è:
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:
?