在没有自动布局的情况下调整UITableView标头的大小

时间:2017-08-07 09:46:45

标签: ios swift uitableview swift3 header

是否可以在设置文本后调整UITabeView标题的大小? 在我的xib中,我得到了一个带有标题的TableView,高度为42,用于1行文本。对于2行我需要高度为52而对于3行我需要62.标题动态设置为标题。但是在生命周期设置标题文本之前调用heightForHeaderInSection func。也许第2行和第2行3未显示。

我写了一个方法,它告诉我标题有多少行文本但是如何更新标题?如果我打电话tableView.reloadData()我最终会进入无限循环。如果我为每个lineamoun设置var 我发现永远不会调用heightForheaderInSection

  func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let cell = tableView.dequeueReusableCell(withIdentifier: headerCell) as! SectionHeader
    cell.titleLabel.text = self.sectionTitle

    linesOfHeader = cell.getNumberOfLines()


    return cell
  }



 func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if(linesOfHeader == 1) { return 44}
        else if(linesOfHeader == 2) {return 52}
        else { return 62}
  }

1 个答案:

答案 0 :(得分:0)

支持动态标题高度的更好解决方案是使用“UITableViewAutomaticDimension”,如下所示:

在viewDidLoad中添加以下行:

self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
self.tableView.estimatedSectionHeaderHeight = 50

并删除函数heightForHeaderInSection

然后允许标签延伸到所需的行数

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let cell = tableView.dequeueReusableCell(withIdentifier: headerCell) as! SectionHeader
       cell.titleLabel.text = self.sectionTitle
       cell.titleLabel.numberOfLines = 3
     return cell
    }

如果标题高度与单元格高度重叠,则将这两行添加到viewDidLoad

    self.tableView.rowHeight = UITableViewAutomaticDimension
    self.tableView.estimatedRowHeight = 40 // estimated cell height