Кажется, вы не устанавливаете делегаты dataSource или tableView (если это не происходит в некоторой части кода, которая не показана). Они понадобятся для этого (и для большинства динамических функций просмотра таблиц).
Для верхних и нижних колонтитулов, которые не изменяют размер, достаточно просто создать их - вернуть вид, который вы хотите использовать, из tableView(_:viewForHeaderInSection:)
и высоту, которую вы хотите в tableView(_:heightForHeaderInSection:)
. Задайте для них значения nil и 0 соответственно, чтобы скрыть заголовок.
Простой пример, который предоставляет заголовки разных размеров для разделов 0 и 2, без заголовка для раздела 1 и скрывает все нижние колонтитулы. Я установил цвета фона заголовков, чтобы они выделялись, и не предоставил другие методы, такие как cellForRowAt
. Обратите внимание, что высота контролируется методом высоты, а не высотой рамки.
class MyVC1: UIViewController {
var mapa: MKMapView!
override func viewDidLoad() {
super.viewDidLoad()
title = "Dummy TableView"
view.backgroundColor = .lightGray
let tableView = UITableView(frame: CGRect(x:50, y:100, width: 300, height: 680), style: .grouped)
view.addSubview(tableView)
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
tableView.dataSource = self
tableView.delegate = self
}
}
//add dataSource and delegate support
extension MyVC1: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
5
}
func numberOfSections(in tableView: UITableView) -> Int {
3
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
switch section {
case 0:
let v = UIView(frame: CGRect(x: 10, y: 10, width: tableView.frame.width - 20, height: 90))
v.backgroundColor = .purple
return v
case 1: return nil
case 2:
let v = UIView(frame: CGRect(x: 10, y: 10, width: tableView.frame.width - 20, height: 20))
v.backgroundColor = .magenta
return v
default: fatalError()
}
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
switch section {
case 0: return CGFloat(60)
case 1: return CGFloat(0)
case 2: return CGFloat(100)
default: fatalError()
}
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
nil
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
0
}
}