在我的应用程序中,我有一个{。{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
}
}
如果我在模拟器上运行(与设备相同),结果就是这样
我不明白为什么高度大于21。 通过“ Debug View Hierarchy”,我可以看到它不是使用标签高度,而是使用 UIView-Encapsulated-Layout-Height
控制台日志:
let viewHomeHeader = ViewHomeHeader.instanceFromNib()
tableView.tableHeaderView = viewHomeHeader
答案 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)。标头应保持指定的高度。