在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显示器进行了限制。我能够通过更改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方法中。所有视图都有其实际尺寸仅改变布局。方法viewDidLayoutSubviewsviewDidAppear之前和viewWillAppear之前调用。

最新更新