UITableViewFooter高度问题

时间:2019-03-28 15:42:52

标签: ios swift uitableview autolayout

在我的应用程序中,我有一个{。{1}},其标题是用.xib创建的,这是此类:

UITableView

我将其添加到tableHeaderView:

class ViewHomeHeader: UIView {
    class func instanceFromNib() -> ViewHomeHeader {
        return UINib(nibName: "ViewHomeHeader", bundle: nil).instantiate(withOwner: self, options: nil).first as! ViewHomeHeader
    }
}

这是只有一个标签及其相对约束的.xib。 enter image description here

如果我在模拟器上运行(与设备相同),结果就是这样

enter image description here

我不明白为什么高度大于21。 通过“ Debug View Hierarchy”,我可以看到它不是使用标签高度,而是使用 UIView-Encapsulated-Layout-Height

控制台日志:

let viewHomeHeader = ViewHomeHeader.instanceFromNib()
tableView.tableHeaderView = viewHomeHeader

2 个答案:

答案 0 :(得分:0)

您可以将优先级设置为底部间距限制,将优先级设置为高度限制

答案 1 :(得分:0)

根据文档中的说明:

  

在为此属性分配视图时,将该视图的高度设置为   非零值。表格视图仅考虑您的身高   视图的框架矩形;它调整标题视图的宽度   自动匹配表格视图的宽度。

因此,您必须先设置标题大小。

如果标题的高度取决于其内容,这是一种可能的解决方案:

let header = HeaderView()
let widthConstraint = header.widthAnchor.constraint(equalToConstant: view.bounds.width)
header.translatesAutoresizingMaskIntoConstraints = false
widthConstraint.isActive = true
let targetSize = header.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize)
header.frame.size.height = targetSize.height
widthConstraint.isActive = false
header.translatesAutoresizingMaskIntoConstraints = true
tableView.tableHeaderView = header

等待viewDidLayoutSubviews()以获得view的实际大小。

如果您的内容是静态的,只需设置其高度即可:

let header = HeaderView()
header.frame.size.height = 30
tableView.tableHeaderView = header

请注意,标头的autoresizingMask不应包含flexibleHeight(检查xib)。标头应保持指定的高度。