UIViewController的视图不调整viewWillAppear()

我已经实例化一个自定义视图控制器的UINavigationController 。 它的视图包含一个button,点击后,导航控制器会将不同的自定义视图控制器的视图推送到视图中:

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

MyOtherViewController's viewWillAppear()函数中,我发现视图没有resize以适应视图层次结构。

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

print()函数的输出是:

查看:<UIView:0x7f9432719bd0; frame =(0 0; 600 600); autoresize = W + H; 层= <CALayer:0x7f9432717cc0 >>

正如你所看到的,视图的大小仍然是600 x 600 ,这是.xib文件的原始大小。 我没有调整.xib视图的大小,因为视图将显示在各种iPhone和iPad显示器上。

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

调整视图的build议方法是什么? 期望视图在调用时被resize是错误的–viewWillAppear()

期望视图在调用时被resize是错误的–viewWillAppear()

是。 你可以肯定,它将被调整时间viewDidAppear 。 但是这对于你的目的来说可能太迟了。 正在查找的事件可能是viewWillLayoutSubviewsviewDidLayoutSubviews 。 这将在以后多次调用,所以如果此时只想执行一次修改,请使用布尔标志:

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