我正在尝试在UITableViewController
“ TBVC1”中为tableview实现tableViewHeader(而不是“ viewForHeaderInSection”)。
我尝试了两种解决方案(当然不起作用...):
1ST:在我的故事板中的UITableViewController
顶部添加了一个UIView。如果我在此UILabel
中添加UIView
(带有约束等),并尝试显示我的View TBVC1...。完整视图为空。但是,如果删除插入在标题UIView
中的UILabel,则可以看到所有单元格和headerView背景色...
您知道为什么我不能在此UIView
中放置任何UI组件吗?
2ND:如果我尝试像这样加载特定的笔尖UIView
:
Bundle.main.loadNibNamed("Title", owner: nil, options: nil)!.first as! UIView
self.tableView.setTableHeaderView(headerView: customView)
self.tableView.updateHeaderViewFrame()
extension UITableView {
/// Set table header view & add Auto layout.
func setTableHeaderView(headerView: UIView) {
headerView.translatesAutoresizingMaskIntoConstraints = false
// Set first.
self.tableHeaderView = headerView
// Then setup AutoLayout.
headerView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
headerView.widthAnchor.constraint(equalTo: self.widthAnchor).isActive = true
headerView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
}
/// Update header view's frame.
func updateHeaderViewFrame() {
guard let headerView = self.tableHeaderView else { return }
// Update the size of the header based on its internal content.
headerView.layoutIfNeeded()
// ***Trigger table view to know that header should be updated.
let header = self.tableHeaderView
self.tableHeaderView = header
}
}
它也不起作用...我的完整视图为空...
您有任何想法为什么我无法在UILabel
的{{1}}中显示简单的UIView
吗?
答案 0 :(得分:0)
我不确定自己的方式是否正确,但是每次设置tableHeaderView
时,我也会手动设置其高度。
如果您想在tableHeaderView
中使用自动布局,则可以在标题视图上调用systemLayoutSizeFitting(UIView.layoutFittingCompressedSize)
以获取计算出的大小并将高度分配给headerView。
您可以在Playground中尝试这个简单的示例。
import UIKit
import PlaygroundSupport
class MyViewController: UITableViewController {
override func loadView() {
super.loadView()
let headerView = UIView()
headerView.backgroundColor = .red
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "Hello World!"
label.textAlignment = .center
label.textColor = .white
headerView.addSubview(label)
let attributes: [NSLayoutConstraint.Attribute] = [.leading, .top, .centerX, .centerY]
NSLayoutConstraint.activate(attributes.map {
NSLayoutConstraint(item: label, attribute: $0, relatedBy: .equal, toItem: headerView, attribute: $0, multiplier: 1, constant: 0)
})
// We have to set height manually, so use `systemLayoutSizeFitting` to get the layouted height
headerView.frame.size.height = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
tableView.tableHeaderView = headerView
}
}
PlaygroundPage.current.liveView = MyViewController()