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显示器进行了限制。我能够通过更改settableheder来反映View.frame.width-(从故事板上的左右约束)来获得我想要的结果,但是我想知道为什么我无法使它起作用,而周围的黑客工作较小?同样,我实际上是设置了settableheader内表标头子视图的尺寸,但是这些子视图在相关的情况下没有任何约束(在程序板上或故事板中)。
。谢谢。
尝试一下,解决方案是覆盖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
}
}
}
请尝试将此代码添加到viewDidLayoutSubviews
方法中。所有视图都有其实际尺寸仅改变布局。方法viewDidLayoutSubviews
在viewDidAppear
之前和viewWillAppear
之前调用。