Nel momento in cui si preme viewDidLoad
, il motore dei vincoli non è stato ancora applicato e la posizione iniziale delle viste non è stata ancora stabilita. Quindi, sentiti libero di aggiungere i vincoli originali in viewDidLoad
, ma dovrai rinviare lo animateWithDuration
fino a un momento successivo (ad esempio viewDidAppear
).
Ad esempio, si supponga di avere un vincolo aggiunto in Interface Builder (IB). È possibile aggiungere un @IBOutlet
riferimento ad esso per controllo -trascinamento dal vincolo nella struttura del documento nel pannello di sinistra in Interface Builder fino al assistente al montaggio:
Ora che avete un riferimento a tale vincolo, è ora possibile modificare il valore di programmazione constant
per quel vincolo (ma, ancora una volta, farlo in viewDidAppear
, non viewDidLoad
, se si desidera vedere questo animato quando la vista si presenta):
@IBOutlet weak var topConstraint: NSLayoutConstraint!
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
topConstraint.constant = 100
UIView.animateWithDuration(2.0) {
self.view.layoutIfNeeded()
}
}
Il processo è lo stesso per i vincoli creati a livello di codice. Basta salvare un riferimento al vincolo e quindi in viewDidAppear
aggiornare constant
e quindi animare la chiamata a layoutIfNeeded()
.
Utilizzando il codice di esempio nella sua domanda così come sono! – SwiftArchitect