【发布时间】:2019-05-31 07:20:09
【问题描述】:
我正在尝试更改表格视图中特定节标题的高度。我使用下面的代码进行了测试,只是为了了解tableView(_:heightForHeaderInSection:) 的工作原理。
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
print("DEBUG : ", section, tableView.sectionHeaderHeight)
return tableView.sectionHeaderHeight
}
下面的调试打印显示该方法被多次调用,但标题高度始终为 18.0(这是默认值)。
DEBUG : 4 18.0
DEBUG : 4 18.0
DEBUG : 0 18.0
DEBUG : 0 18.0
DEBUG : 1 18.0
DEBUG : 1 18.0
DEBUG : 2 18.0
...
DEBUG : 3 18.0
现在,一旦我使用 18.0 作为返回的固定值(用于测试目的),表格视图的垂直扩展在视觉上被压缩,id est 部分更靠近,因此整个 UI 看起来不同。似乎各部分之间的空间减少了,因为第一部分的标题(垂直)只有一半可见。
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
print("DEBUG : ", section, tableView.sectionHeaderHeight)
return 18.0
}
这怎么可能?
可能是一个错误?
--- 更新 --- (13.06.2019)
我的问题是基于隐藏包含标题的部分 (2) 的意图。我意识到 tableView.sectionHeaderHeight 是错误的属性。我应该使用super.tableView(tableView, heightForHeaderInSection: section)。
下面的代码可以按需要工作:
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
if (section == 2) && myCondition {
return CGFloat.leastNonzeroMagnitude
}
return super.tableView(tableView, heightForHeaderInSection: section)
}
尽管如此,我不知道18.0(见上文)来自哪里,因为我不使用 .xib 文件。
顺便说一句,super.tableView(tableView, heightForHeaderInSection: section) 总是返回 -1。我相信这会让 iOS 自行决定选择哪个高度。手动设置18.0(用于测试)使标题缩小,因为 iOS 选择的标题高度的自动值更高。
我没有找到打印此值的属性(必须在 30.0 附近 - 一个疯狂的猜测,仅此而已)。
【问题讨论】:
-
可以显示viewForHeader吗?
-
请也使用estimatedHeight方法,我认为它可以解决您的问题
-
@Alastar - 你的意思是截图吗?
-
不,您的 viewForHeader 方法,如果您为每个标题创建了任何自定义视图。
-
@YogeshPatel - 添加
estimatedHeightForHeaderInSection(始终为0.0)保持表格视图压缩,但完全删除第一部分的标题!其他部分的标题保留。这根本没有意义!
标签: ios swift uitableview uitableviewsectionheader