【发布时间】:2016-04-25 11:35:04
【问题描述】:
我有一个看起来像这样的视图控制器:
class SpotViewController: UIViewController {
let spot: Spot
init(spot: Spot) {
self.spot = spot
super.init(nibName: "SpotViewController", bundle: nil)
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
print("viewWillAppear: \(view.frame)") # => (0.0, 0.0, 600.0, 600.0)
}
override func viewDidLoad() {
super.viewDidLoad()
print("viewDidLoad: \(view.frame)") # => (0.0, 0.0, 600.0, 600.0)
}
}
当我通过let spotViewController = SpotViewController(spot: spot) 实例化视图控制器并将其推送到导航控制器时,viewDidLoad 和viewWillAppear 中的结果帧都不正确。它给了我(0.0, 0.0, 600.0, 600.0),这是界面生成器中的大小。
为什么会发生这种情况以及使用 xib 实例化视图控制器以确保框架正确的正确方法是什么?
【问题讨论】:
-
你如何显示控制器(视图)?
-
@Wain 我只是将它推入
navigationController堆栈,带有navigationController!.pushViewController(spotViewController, animated: true) -
viewDidLayoutSubviews() 中的框架是什么?
-
@DennisPashkov 在
viewDidLayoutSubviews中是正确的 ((0.0, 0.0, 375.0, 667.0))。这是添加诸如添加程序元素/约束之类的正确位置吗? -
不,当视图加载/合适时添加它们和布局规则。通过视图出现,布局将变得井井有条