加载视图时灵活的视图位置约束

时间:2017-02-03 14:06:38

标签: swift3 constraints viewdidload

我是编程新手

我的主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

1 个答案:

答案 0 :(得分:0)

我通过更多的研究和反复试验找到了答案!

而不是去

override func viewDidLoad() {

    super.viewDidLoad()
    RefreshConstraints()

    }

我将代码移到了viewDidLayoutSubviews()下,但它确实有效!

希望这有帮助!