2017-02-03 1 views
0

Je suis nouveau dans la programmationContraintes flexibles de vue la position lorsque la vue est chargé

J'ai 2 subviews dans ma principale RootView (Magenta) - qui sont AppView (orange) et MenuBarView (Noir) - http://imgur.com/ySgEP9k

Je veux la barre de menu pour être dans une certaine position, même quand il est tourné alors je l'ai fait quelque chose comme ceci:

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 
    } 
    (...) 
} 

Lorsque l'écran est tourné, j'ai mis

Swift 3

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 
    RefreshConstraints() 
} 

pour appliquer les modifications. Cela fonctionne bien. Par conséquent, je sais que mes contraintes et le code pour les appliquer sont corrects. Cependant, quand je l'ai essayé de faire:

Swift 3

override func viewDidLoad() { 

    RootView.translatesAutoresizingMaskIntoConstraints = false 
    MenuBarView.translatesAutoresizingMaskIntoConstraints = false 
    AppView.translatesAutoresizingMaskIntoConstraints = false 

    super.viewDidLoad() 

    RefreshConstraints() 

} 

les contraintes de sous-vue ne sont pas appliquées lorsque l'application est initialement chargé et affiche un écran magenta (c.-à-rootView) - http://imgur.com/Koqliey

Qu'est-ce que j'ai manqué - pour cela ne fonctionne pas correctement lorsque l'application est lancée? Toute aide est appréciée, merci: D

Répondre

0

J'ai trouvé la réponse moi-même à travers plus de recherche et d'essais et d'erreurs!

Plutôt que de

override func viewDidLoad() { 

    super.viewDidLoad() 
    RefreshConstraints() 

    } 

je me suis déplacé le code sous viewDidLayoutSubviews() et cela a fonctionné!

Espérons que cela aide!