我已使用自定义视图控制器实例化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()时调整视图是否错误?
答案 0 :(得分:1)
在调用-viewWillAppear()时调用视图是否错误?
是。您可以确定它会在时间viewDidAppear
之前调整大小。但对你的目的来说,这可能为时已晚。您正在寻找的事件可能是viewWillLayoutSubviews
或viewDidLayoutSubviews
。这将在未来多次调用,因此如果您此时只想执行一次修改,请使用布尔标志:
var didSetUp = false
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if self.didSetUp { return }
self.didSetUp = true
// ... do stuff ...
}