Pełny przykład 2019 do skopiowania i wklejenia
Pierwszy zestaw „Zgrupowany” w scenorysie: musi to nastąpić w czasie początkowym, nie można tego ustawić później, więc łatwiej jest zapamiętać, aby zrobić to na scenorysie:
Kolejny,
Musi zaimplementować heightForHeaderInSection z powodu błędu Apple.
func tableView(_ tableView: UITableView,
heightForHeaderInSection section: Int) -> CGFloat {
return CGFloat(70.0)
}
Wciąż istnieje błąd Apple - od dziesięciu lat - w którym po prostu nie wyświetla pierwszego nagłówka (tj. Indeksu 0), jeśli nie masz heightForHeaderInSection
połączenia.
Więc tableView.sectionHeaderHeight = 70
po prostu nie działa, jest zepsuty .
Ustawienie ramki nic nie daje:
W viewForHeaderInSection
prostu utwórz UIView ().
To bezcelowe / nic nie osiągniesz, jeśli UIView (ramka ...) ponieważ iOS po prostu ustawia rozmiar widoku zgodnie z tabelą.
Więc pierwsza linijka viewForHeaderInSection
będzie prosta let view = UIView()
i to jest widok, do którego wracasz.
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
}
To wszystko - wszystko inne to strata czasu.
Kolejny „kapryśny” problem Apple.
Użyte powyżej rozszerzenie wygody to:
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:
?