我是编程新手
我的主RootView
(洋红色)中有2个子视图 - AppView
(橙色)和MenuBarView
(黑色) - http://imgur.com/ySgEP9k
我希望菜单栏在旋转时处于某个位置,所以我做了类似的事情:
Swift 3
class ViewController: UIViewController {
var MenuBarPosition = "Left"
func RefreshConstraints() {
switch MenuBarPosition {
case "Right":
self.ApplyMenuBarRight()
(...)
default:
print("MenuBarPositionError")
}
func ApplyMenuBarRight() {
RootView.removeConstraints(ApplyMenuBarOnRightRemoveConstraints) // This is an array
RootView.addConstraints(ApplyMenuBarOnRightConstraints) // Also an Array
}
(...)
}
当屏幕旋转时,我已经放了
Swift 3
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
RefreshConstraints()
}
应用更改。这很好用。因此,我知道我的约束和应用它们的代码是正确的。但是,当我尝试做的时候:
Swift 3
override func viewDidLoad() {
RootView.translatesAutoresizingMaskIntoConstraints = false
MenuBarView.translatesAutoresizingMaskIntoConstraints = false
AppView.translatesAutoresizingMaskIntoConstraints = false
super.viewDidLoad()
RefreshConstraints()
}
最初加载应用时未应用子视图约束并显示洋红色屏幕(即rootView
) - http://imgur.com/Koqliey
我错过了什么 - 因为它在应用程序启动时无法正常工作?感谢任何帮助,谢谢:D
答案 0 :(得分:0)
我通过更多的研究和反复试验找到了答案!
而不是去
override func viewDidLoad() {
super.viewDidLoad()
RefreshConstraints()
}
我将代码移到了viewDidLayoutSubviews()
下,但它确实有效!
希望这有帮助!