UIViewController的视图未被viewWillAppear()调整大小

时间:2016-05-17 23:36:40

标签: ios swift uiview uiviewcontroller

我已使用自定义视图控制器实例化UINavigationController。它的视图包含一个按钮,当点击该按钮时,导航控制器会将不同自定义视图控制器的视图推入视图中:

@IBAction func showVC(sender: AnyObject) {
    let vc = MyOtherViewController()
    navigationController?.pushViewController(vc, animated: true)
}

MyOtherViewController's viewWillAppear()函数中,我看到视图没有调整大小以适合视图层次结构。

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    print("view: \(view)")
}

print()函数的输出是:

view:< UIView:0x7f9432719bd0; frame =(0 0; 600 600); autoresize = W + H; layer =< CALayer:0x7f9432717cc0>>

如您所见,此时视图的大小仍为600 x 600,这是.xib文件的原始大小。我没有调整.xib中视图的大小,因为视图将显示在各种iPhone和iPad显示器上。

我的困境是我需要视图的最终尺寸,因为我需要根据视图的宽度构建一些NSLayoutConstraints

调整视图大小的推荐方法是什么?期望在调用-viewWillAppear()时调整视图是否错误?

1 个答案:

答案 0 :(得分:1)

  

在调用-viewWillAppear()时调用视图是否错误?

是。您可以确定它会在时间viewDidAppear之前调整大小。但对你的目的来说,这可能为时已晚。您正在寻找的事件可能是viewWillLayoutSubviewsviewDidLayoutSubviews。这将在未来多次调用,因此如果您此时只想执行一次修改,请使用布尔标志:

var didSetUp = false
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    if self.didSetUp { return }
    self.didSetUp = true
    // ... do stuff ...
}