func setTableHeader(){
let headerWidth = Double(tableHeader.frame.width)
// also tried let headerWidth = Double(tableView.frame.width)
print("header width is \(headerWidth)")
}
func viewWillAppear(){ output --> 351
setTableHeader()
//also tried in View Did Appear
}
func viewDidDisappear(){ output --> 296
setTableHeader()
}
输出指的是在Iphone SE上运行时发生的情况。我在带有Iphone 6显示屏的Storyboard中设计了我的tableview和表头。我能够通过更改setTableHeader来反映view.frame.width - (故事板中的左右约束)来获得我想要的结果,但是我想知道为什么我无法使这个工作,以及不那么hacky的工作将是什么?另外,我实际上在setTableHeader中设置表头的子视图的维度,但这些子视图没有约束(编程或故事板),如果相关的话。
谢谢。
答案 0 :(得分:1)
试试这个,解决方案是覆盖UIViewController()。viewDidLayoutSubviews(),根据它的约束获取标题视图的正确大小,在标题上设置框架,并将其重置为表头视图
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Dynamic sizing for the header view
if let headerView = tableView.tableHeaderView {
let height = headerView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height
var headerFrame = headerView.frame
// If we don't have this check, viewDidLayoutSubviews() will get
// repeatedly, causing the app to hang.
if height != headerFrame.size.height {
headerFrame.size.height = height
headerView.frame = headerFrame
tableView.tableHeaderView = headerView
}
}
}
答案 1 :(得分:0)
请尝试将此代码添加到viewDidLayoutSubviews
方法。
所有视图只有改变布局才能获得实际尺寸。在viewDidLayoutSubviews
之前和viewDidAppear
之后调用的方法viewWillAppear
。