完整的2019年示例要复制和粘贴
首先在情节提要上设置“分组”:它必须在初始化时发生,您以后不能真正进行设置,因此更容易记住在情节提要上进行设置:
下一个,
由于Apple错误,必须实现heightForHeaderInSection。
func tableView(_ tableView: UITableView,
heightForHeaderInSection section: Int) -> CGFloat {
return CGFloat(70.0)
}
至今已有十年之久的Apple漏洞-如果您没有heightForHeaderInSection
通话,它根本不会显示第一个标题(即索引0)。
所以,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
}
就是这样-其他任何事情都是浪费时间。
苹果公司的另一个“麻烦”问题。
上面使用的便捷扩展是:
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:
?