带有自动布局的 UITableView 中 header 部分的额外 space

Extra space at section header in UITableView with Autolayout

我有一个 UITableViewController 有:

  1. tableHeaderView 的 UIView
  2. sectionHeaderView 的 UIView
  3. 用于表格视图单元格的 UITableViewCell
  4. 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