Wenn Sie viewDidLoad
erreichen, wurde die Constraints-Engine noch nicht angewendet und der Startort der Ansichten wurde noch nicht festgelegt. Fühlen Sie sich also frei, die ursprünglichen Einschränkungen in viewDidLoad
hinzuzufügen, aber Sie werden die animateWithDuration
bis später in dem Prozess (z. B. viewDidAppear
) verschieben möchten.
Nehmen wir zum Beispiel an, Sie haben eine Einschränkung, die Sie in Interface Builder (IB) hinzugefügt haben. Sie können einen @IBOutlet
Verweis auf mich durch Steuer -dragging von der Einschränkung in der Dokumentgliederung im linken Fenster im Interface Builder hinunter zum Assistenten Editor hinzufügen:
Nun, da Sie einen Verweis auf dass Zwang, können Sie nun den constant
Wert für diese Einschränkung programmatisch ändern (aber auch hier tun dies in viewDidAppear
, nicht viewDidLoad
, wenn Sie diese animierte sehen wollen, wenn die Ansicht dargestellt wird):
@IBOutlet weak var topConstraint: NSLayoutConstraint!
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
topConstraint.constant = 100
UIView.animateWithDuration(2.0) {
self.view.layoutIfNeeded()
}
}
Der Prozess ist derselbe für programmatisch erstellte Einschränkungen. Speichern Sie einfach einen Verweis auf die Einschränkung und aktualisieren Sie dann in viewDidAppear
die constant
und animieren Sie dann den Aufruf an layoutIfNeeded()
.
das Codebeispiel in Ihrer Frage verwenden, wie sie ist! – SwiftArchitect