Повний приклад 2019 року для копіювання та вставки
Перший набір "Згрупований" на раскадровці: це повинно статися в найкоротший час, ви не можете його встановити пізніше, тому простіше запам’ятати це зробити на раскадровці:
Далі,
Потрібно реалізувати висотуForHeaderInSection через помилку Apple.
func tableView(_ tableView: UITableView,
heightForHeaderInSection section: Int) -> CGFloat {
return CGFloat(70.0)
}
Ще є помилка Apple - уже десять років - де вона просто не відображатиме перший заголовок (тобто індекс 0), якщо у вас немає heightForHeaderInSection
дзвінка.
Отже, tableView.sectionHeaderHeight = 70
просто не працює, він зламаний .
Встановлення кадру нічого не дає:
У viewForHeaderInSection
просто створіть UIView ().
Безглуздо / нічого не досягає, якщо ви UIView (кадр ...), оскільки iOS просто встановлює розмір перегляду, визначений таблицею.
Отже, перший рядок viewForHeaderInSection
буде просто, let view = UIView()
і ось такий погляд ви повернете.
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
}
Ось і все - все інше - витрата часу.
Ще одна «метушлива» проблема Apple.
Зручне розширення, яке використовується вище:
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:
?