Ich habe ein UITextField, dessen Breite ich beim Tippen vergrößern möchte. Ich habe die Einschränkungen eingerichtet und sichergestellt, dass die Einschränkung auf der linken Seite die niedrigere Priorität hat als die, die ich auf der rechten Seite animieren möchte.
Hier ist der Code, den ich verwenden möchte.
// move the input box
UIView.animateWithDuration(10.5, animations: {
self.nameInputConstraint.constant = 8
}, completion: {
(value: Bool) in
println(">>> move const")
})
Das funktioniert, aber es scheint sofort zu geschehen und es scheint keine Bewegung zu geben. Ich habe versucht, es auf 10 Sekunden einzustellen, um sicherzustellen, dass mir nichts entgeht, aber ich habe die gleichen Ergebnisse erzielt.
nameInputConstraint ist der Name der Einschränkung, die ich gesteuert habe, um eine Verbindung von IB zu meiner Klasse herzustellen.
Danke im Vorraus für deine Hilfe!
xcode
swift
constraints
xcode6
icekomo
quelle
quelle
Antworten:
Sie müssen zuerst die Einschränkung ändern und dann das Update animieren.
Swift 2
Swift 3, 4, 5
quelle
self
im Verschluss verwendeten fest.SWIFT 4.x:
Beispiel mit Abschluss:
quelle
Es ist sehr wichtig darauf hinzuweisen, dass
view.layoutIfNeeded()
dies nur für die Ansichtsunteransichten gilt.Um die Ansichtsbeschränkung zu animieren, ist es daher wichtig, sie in der Ansicht zum Animieren der Ansicht wie folgt aufzurufen :
Ein Beispiel für ein einfaches Layout wie folgt:
quelle
Mit Swift 5 und iOS 12.3 können Sie je nach Bedarf eine der drei folgenden Möglichkeiten wählen, um Ihr Problem zu lösen.
# 1. Verwenden
UIView
deranimate(withDuration:animations:)
Klassenmethode vonanimate(withDuration:animations:)
hat die folgende Erklärung:Der folgende Spielplatzcode zeigt eine mögliche Implementierung von
animate(withDuration:animations:)
, um die ständige Änderung einer Auto-Layout-Einschränkung zu animieren.# 2. Verwenden
UIViewPropertyAnimator
desinit(duration:curve:animations:)
Initialisierers und derstartAnimation()
Methodeinit(duration:curve:animations:)
hat die folgende Erklärung:Der folgende Spielplatzcode zeigt eine mögliche Implementierung von
init(duration:curve:animations:)
undstartAnimation()
um die ständige Änderung einer Auto-Layout-Einschränkung zu animieren.#3. Verwenden
UIViewPropertyAnimator
derrunningPropertyAnimator(withDuration:delay:options:animations:completion:)
Klassenmethode vonrunningPropertyAnimator(withDuration:delay:options:animations:completion:)
hat die folgende Erklärung:Der folgende Spielplatzcode zeigt eine mögliche Implementierung von
runningPropertyAnimator(withDuration:delay:options:animations:completion:)
, um die ständige Änderung einer Auto-Layout-Einschränkung zu animieren.quelle
In meinem Fall habe ich nur die benutzerdefinierte Ansicht aktualisiert.
quelle
Schau dir das an .
Das Video sagt, dass Sie nur
self.view.layoutIfNeeded()
wie folgt hinzufügen müssen :quelle