无法获取表视图或表格视图标题的宽度,直到viewDidAppear
问题描述:
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中设计了带有约束的桌面视图和表头。我能够通过改变setTableHeader来反映view.frame.width - (来自storyboard的左右约束),但是我想知道为什么我不能让这个工作,以及什么不太合适的工作会是什么?此外,我实际上在setTableHeader中设置表头的子视图的尺寸,但这些子视图没有约束(编程式地或故事板),以防相关。无法获取表视图或表格视图标题的宽度,直到viewDidAppear
谢谢。
答
尝试此,将溶液覆盖的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
之后调用。