2016-12-16 71 views
0
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

谢谢。

回答

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 
    } 
} 
} 
0

请尝试将此代码添加到viewDidLayoutSubviews方法。 所有视图都只有改变布局才得到实际尺寸。方法viewDidLayoutSubviewsviewDidAppear之前和viewWillAppear之后调用。