带有自动布局的 UITableView 中 header 部分的额外 space
Extra space at section header in UITableView with Autolayout
我有一个 UITableViewController 有:
- tableHeaderView 的 UIView
- sectionHeaderView 的 UIView
- 用于表格视图单元格的 UITableViewCell
- tableFooterView 的 UIView
我的故事板中有 UITableViewController,也定义了 tableHeaderView 和 tableFooterView。 sectionHeaderView 和 tableviewcell 在 nib 文件中是分开的。
override func viewDidLoad() {
super.viewDidLoad()
//Register the different cells of the tableview
// First load table nib
let bundle = Bundle(for: type(of: self))
// Register table cell class from nib
let cellNib = UINib(nibName: "CheckingDocumentCheckCell", bundle: bundle)
tableView.register(cellNib, forCellReuseIdentifier: CheckingDocumentCheckCellVC.reuseIdentifer)
//Register table section header
let headerCellNib = UINib(nibName: "CheckingDocumentCategoryHeader", bundle: bundle)
tableView.register(headerCellNib, forCellReuseIdentifier: CheckingDocumentCategoryHeaderCellVC.reuseIdentifer)
let tapGestureReconizer = UITapGestureRecognizer(target: self, action: #selector(tap))
tapGestureReconizer.cancelsTouchesInView = false
tableView.addGestureRecognizer(tapGestureReconizer)
tableView.keyboardDismissMode = .onDrag
tableView.tableHeaderView = containerHeaderView
tableView.tableFooterView = containerFooterView
saveCheckingDocumentButton.backgroundColor = UIColor(hexString: ConstantsEnum.lideraColor)
saveCheckingDocumentButton.tintColor = UIColor.white
saveCheckingDocumentButton.contentEdgeInsets = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 10)
saveCheckingDocumentButton.layer.cornerRadius = 5
saveCheckingDocumentButton.layer.borderWidth = 1
saveCheckingDocumentButton.layer.borderColor = UIColor(hexString: ConstantsEnum.lideraColor)?.cgColor
saveCheckingDocumentButton.setTitle(NSLocalizedString("SAVECHECKINGDOCUMENT", comment: ""), for: .normal)
}
我的 header 视图、页脚视图和表格单元格工作正常。我遇到问题的地方是 header 部分,每个部分都留下白色 space,我无法重现问题所在(红色框是 space我想删除):
我对 header 部分的看法是:
我实现视图的方法是:
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let category = myCheckingDocumentResponse?.document?.categoriesQuestions[section]
let cell = tableView.dequeueReusableCell(withIdentifier: CheckingDocumentCategoryHeaderCellVC.reuseIdentifer) as! CheckingDocumentCategoryHeaderCellVC
cell.headerContainer.backgroundColor = .lightGray
cell.title.text = String(format: "%@\n%@", category?.description ?? "", category?.questionDescription ?? "")
return cell
}
如果我关闭此方法并且不使用第 header 部分,则不会显示白色 space,因此需要与此部分相关的内容 header。
我今天才 运行 研究这个问题,终于找到了一个有意义且有效的答案:
self.tableView.sectionHeaderTopPadding = 0
看起来这个 属性 刚刚添加到 iOS 15
我有一个 UITableViewController 有:
- tableHeaderView 的 UIView
- sectionHeaderView 的 UIView
- 用于表格视图单元格的 UITableViewCell
- tableFooterView 的 UIView
我的故事板中有 UITableViewController,也定义了 tableHeaderView 和 tableFooterView。 sectionHeaderView 和 tableviewcell 在 nib 文件中是分开的。
override func viewDidLoad() {
super.viewDidLoad()
//Register the different cells of the tableview
// First load table nib
let bundle = Bundle(for: type(of: self))
// Register table cell class from nib
let cellNib = UINib(nibName: "CheckingDocumentCheckCell", bundle: bundle)
tableView.register(cellNib, forCellReuseIdentifier: CheckingDocumentCheckCellVC.reuseIdentifer)
//Register table section header
let headerCellNib = UINib(nibName: "CheckingDocumentCategoryHeader", bundle: bundle)
tableView.register(headerCellNib, forCellReuseIdentifier: CheckingDocumentCategoryHeaderCellVC.reuseIdentifer)
let tapGestureReconizer = UITapGestureRecognizer(target: self, action: #selector(tap))
tapGestureReconizer.cancelsTouchesInView = false
tableView.addGestureRecognizer(tapGestureReconizer)
tableView.keyboardDismissMode = .onDrag
tableView.tableHeaderView = containerHeaderView
tableView.tableFooterView = containerFooterView
saveCheckingDocumentButton.backgroundColor = UIColor(hexString: ConstantsEnum.lideraColor)
saveCheckingDocumentButton.tintColor = UIColor.white
saveCheckingDocumentButton.contentEdgeInsets = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 10)
saveCheckingDocumentButton.layer.cornerRadius = 5
saveCheckingDocumentButton.layer.borderWidth = 1
saveCheckingDocumentButton.layer.borderColor = UIColor(hexString: ConstantsEnum.lideraColor)?.cgColor
saveCheckingDocumentButton.setTitle(NSLocalizedString("SAVECHECKINGDOCUMENT", comment: ""), for: .normal)
}
我的 header 视图、页脚视图和表格单元格工作正常。我遇到问题的地方是 header 部分,每个部分都留下白色 space,我无法重现问题所在(红色框是 space我想删除):
我对 header 部分的看法是:
我实现视图的方法是:
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let category = myCheckingDocumentResponse?.document?.categoriesQuestions[section]
let cell = tableView.dequeueReusableCell(withIdentifier: CheckingDocumentCategoryHeaderCellVC.reuseIdentifer) as! CheckingDocumentCategoryHeaderCellVC
cell.headerContainer.backgroundColor = .lightGray
cell.title.text = String(format: "%@\n%@", category?.description ?? "", category?.questionDescription ?? "")
return cell
}
如果我关闭此方法并且不使用第 header 部分,则不会显示白色 space,因此需要与此部分相关的内容 header。
我今天才 运行 研究这个问题,终于找到了一个有意义且有效的答案:
self.tableView.sectionHeaderTopPadding = 0
看起来这个 属性 刚刚添加到 iOS 15