这使我发疯。
UITableViewController
的子类。 UITableViewController
既是其表视图的代理又是数据源)。 tableView(_:titleForHeaderInSection:)
tableView(_:viewforHeaderInSection:)
tableView(_:heightForHeaderInSection:)
tableView(_:estimatedHeightForHeaderInSection)
...两个都没有被调用。
结果,我的表视图部分不显示任何标题。
如果我指定表格视图的全局部分标题高度:
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedSectionHeaderHeight = 12 // (say)
...然后显示空白标题,但是
tableView(_:titleForHeaderInSection:)
等仍不称为,并且我的自定义标题视图从不显示。之前也曾提出过类似的问题,Apple的文档似乎并非100%正确,但是我确信我正在做所有必需的事情(我已经尝试了所有配置)。
我想念什么?
代码库很大,不是我的;也许我错过了一些东西,但不知道还要寻找什么...
更新
我创建了一个新的最小项目进行测试,事实证明,我只需要实现这两个委托方法(而无需修改表视图的任何属性):
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) // (say)
view.backgroundColor = UIColor.red // (say)
return view
}
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 10.0 // (say)
}
...显示我的自定义部分标题视图。
但是,不能在我现有的项目上使用相同的设置。某些地方一定在干扰...
更新2
我订阅了
UITableView
以查看发生了什么,但仍然无法弄清楚(请参阅内联注释):导入UIKit
class DebugTableView: UITableView {
// GETS EXECUTED:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override var estimatedSectionHeaderHeight: CGFloat {
// NEVER GETS EXECUTED:
get {
return super.estimatedSectionHeaderHeight
}
// NEVER GETS EXECUTED:
set (newValue) {
super.estimatedSectionHeaderHeight = newValue
}
}
override var sectionHeaderHeight: CGFloat {
// NEVER GETS EXECUTED:
get {
return super.sectionHeaderHeight
}
// NEVER GETS EXECUTED:
set (newValue) {
super.sectionHeaderHeight = newValue
}
}
// NEVER GETS EXECUTED:
override func headerView(forSection section: Int) -> UITableViewHeaderFooterView? {
let view = super.headerView(forSection: section)
return view
}
// GETS EXECUTED ONCE PER CELL:
override func rectForHeader(inSection section: Int) -> CGRect {
var rect = super.rectForHeader(inSection: section)
rect.size.height = 1000 // HAS NO EFFECT
return rect
}
}
最佳答案
您只需要设置sectionHeaderHeight
,不仅要估计高度!
喜欢,
迅捷4.0
tableView.sectionHeaderHeight = UITableView.automaticDimension
tableView.estimatedSectionHeaderHeight = 25
然后只需覆盖
viewForHeaderInSection
即可。无需覆盖其他任何代表!