gpt4 book ai didi

ios - TableView (_ :viewforHeaderInSection:) Not Being Called

转载 作者:行者123 更新时间:2023-11-29 00:24:36 36 4
gpt4 key购买 nike

这个让我发疯。

  1. 我有一个 View Controller ,UITableViewController 的子类。
  2. 表格 View 的数据源被替换为自定义数据源对象,而不是 View Controller (默认情况下,UITableViewController 是其表格 View 的委托(delegate)和数据源)。<
  3. 自定义数据源未实现 tableView(_:titleForHeaderInSection:)
  4. View Controller (委托(delegate))实现:

    • tableView(_:viewforHeaderInSection:)
    • tableView(_:heightForHeaderInSection:)
    • tableView(_:estimatedHeightForHeaderInSection)

    ...两者都没有被调用。

因此,我的 TableView 部分不显示任何标题。

如果我指定 TableView 的全局部分标题高度:

override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedSectionHeaderHeight = 12 // (say)

...然后显示空白标题,但 tableView(_:titleForHeaderInSection:)仍未调用,我的自定义标题 View 从未显示。

以前也有人问过类似的问题,Apple 的文档似乎不是 100% 正确,但我很肯定我正在做所有需要的事情(我已经尝试了所有配置)。

我错过了什么?

代码库很大,不是我的;也许我在这里遗漏了一些东西,但不知道还要寻找什么......


更新

我创建了一个新的、最小的项目来测试,结果我只需要实现这两个委托(delegate)方法(而不修改 TableView 的任何属性):

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)
}

...显示我的自定义部分标题 View 。

但是,相同的设置不适用于我现有的项目。一定有什么东西在某处干扰...


更新 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,不仅仅是估计高度!

喜欢,

Swift 4.0

    tableView.sectionHeaderHeight = UITableView.automaticDimension
tableView.estimatedSectionHeaderHeight = 25

然后只需覆盖 viewForHeaderInSection。并且无需覆盖任何其他代表!

关于ios - TableView (_ :viewforHeaderInSection:) Not Being Called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43407865/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com