iPhone 5 - 表格视图标题高度不正确

时间:2018-03-26 15:18:32

标签: swift xcode

我有一个用于表视图标题的CustomView。

标题内标签的高度是动态的。对于iPhone 5以外的所有模拟器,它都有效。 Label文本适用于任意数量的行。高度增加变为正确的所需高度。

但对于iPhone 5模拟器,标题不会增加到合适的高度。

这是iPhone 5模拟器的问题吗?没有真正的iPhone 5设备来测试它。

1 个答案:

答案 0 :(得分:0)

尝试使用autolayout设置标题高度。在视图布局所有子视图后,您需要设置标题高度。

  override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    self.tableView.layoutHeaderView()
  }

使用此扩展程序,它会将标题高度调整为所需的空间:

extension UITableView {
  public func layoutTableHeaderView() {
    guard let headerView = self.tableHeaderView else { return }

    headerView.translatesAutoresizingMaskIntoConstraints = false

    let headerWidth = headerView.bounds.size.width;
    let temporaryWidthConstraints = NSLayoutConstraint.constraints(withVisualFormat: "[headerView(width)]", options: NSLayoutFormatOptions(rawValue: UInt(0)), metrics: ["width": headerWidth], views: ["headerView": headerView])

    headerView.addConstraints(temporaryWidthConstraints)

    headerView.setNeedsLayout()
    headerView.layoutIfNeeded()

    let headerSize = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize)
    let height = headerSize.height
    var frame = headerView.frame

    frame.size.height = height
    headerView.frame = frame

    self.tableHeaderView = headerView

    headerView.removeConstraints(temporaryWidthConstraints)
    headerView.translatesAutoresizingMaskIntoConstraints = true
  }
}

每次需要调整高度视图调用时

self.tableView.layoutHeaderView()

它会将桌子高度视图调整到所需的最小空间,但它不会切割任何东西。

P.S:如果你使用autolayout设置标题高度,你需要定义标签之间的距离,headerView的顶部和底部。