1、 在设置组头组尾的时候,自定义的组头或者组尾一定要继承自:UITableViewHeaderFooterView
2、组头和组尾在注册的时候是同一个代理方法,如果只想要组头,设置一下组头高度的代理方法,组尾的设置成0.1即可,同理,如果只想要组尾也是如此
3、切记,一定要注册!!!
// 注册组头视图
view.register(ZYDemoView.classForCoder(), forHeaderFooterViewReuseIdentifier: "ZYPlanHeadView")
// - 懒加载控件
lazy var tableView: UITableView = {
let view = UITableView(frame: CGRect.zero, style: .plain)
view.delegate = self
view.dataSource = self
view.separatorStyle = .none
view.tableFooterView = UIView()
view.rowHeight = 75
view.estimatedRowHeight = 0
view.estimatedSectionFooterHeight = 0
view.estimatedSectionHeaderHeight = 0
// 注册组头视图
view.register(ZYDemoView.classForCoder(), forHeaderFooterViewReuseIdentifier: "ZYPlanHeadView")
view.register(UITableViewCell.classForCoder(), forCellReuseIdentifier: "cellID")
return view
}()
// 实现代理方法
// 这是注册组头或者组尾(组头和组尾是一个代理方法)
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
guard let sectionView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "ZYPlanHeadView") as? ZYDemoView else {
return UIView()
}
return sectionView
}
// 这是设置组头的高度(如果不需要)
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 30
}
// 这是设置组尾的高度(如果不需要)
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 0.1
}
这里的ZYDemoView是自定义的view,必须继承自:UITableViewHeaderFooterView
内部代码如下:
import UIKit
class ZYDemoView: UITableViewHeaderFooterView {
override init(reuseIdentifier: String?) {
super.init(reuseIdentifier: reuseIdentifier)
// 这里修改组头的背景颜色 (默认颜色和系统的那个组头的颜色是一样的)
contentView.backgroundColor = UIColor.white
setUI()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setUI(){
contentView.addSubview(titleLabel)
titleLabel.mas_makeConstraints { (make) in
make?.left.equalTo()(30)
make?.centerY.mas_equalTo()(self)
}
}
private lazy var titleLabel: UILabel = {
let label = UILabel()
label.text = "组头组头"
label.textAlignment = .center
label.textColor = UIColor.black
label.font = UIFont.systemFont(ofSize: 20)
return label
}()
}