J'ai un UITextField que je veux agrandir sa largeur lorsqu'il est tapé dessus. J'ai configuré les contraintes et je me suis assuré que la contrainte de gauche a la priorité inférieure à celle que j'essaie d'animer du côté droit.
Voici le code que j'essaie d'utiliser.
// move the input box
UIView.animateWithDuration(10.5, animations: {
self.nameInputConstraint.constant = 8
}, completion: {
(value: Bool) in
println(">>> move const")
})
Cela fonctionne, mais cela semble se produire instantanément et il ne semble pas y avoir de mouvement. J'ai essayé de le régler 10 secondes pour m'assurer de ne rien manquer, mais j'ai obtenu les mêmes résultats.
nameInputConstraint est le nom de la contrainte que je contrôle glissée pour se connecter à ma classe depuis IB.
Merci d'avance pour votre aide!
xcode
swift
constraints
xcode6
icekomo
la source
la source
Réponses:
Vous devez d'abord modifier la contrainte, puis animer la mise à jour.
Swift 2
Swift 3, 4, 5
la source
self
utilisé dans la fermeture.SWIFT 4.x:
Exemple avec complétion:
la source
Il est très important de souligner que cela
view.layoutIfNeeded()
s'applique uniquement aux sous-vues de vue.Par conséquent , pour animer la contrainte de vue, il est important d'appeler sur la vue à Animer superview comme suit:
Un exemple pour une mise en page simple comme suit:
la source
Avec Swift 5 et iOS 12.3, selon vos besoins, vous pouvez choisir l'une des 3 façons suivantes afin de résoudre votre problème.
#1. Utilisation de
UIView
laanimate(withDuration:animations:)
méthode de classeanimate(withDuration:animations:)
a la déclaration suivante:Le code Playground ci-dessous montre une implémentation possible de
animate(withDuration:animations:)
afin d'animer le changement constant d'une contrainte de disposition automatique.# 2. Utilisation de
UIViewPropertyAnimator
l'init(duration:curve:animations:)
initialiseur et de lastartAnimation()
méthodeinit(duration:curve:animations:)
a la déclaration suivante:Le code Playground ci-dessous montre une implémentation possible de
init(duration:curve:animations:)
etstartAnimation()
afin d'animer le changement constant d'une contrainte de disposition automatique.# 3. Utilisation de
UIViewPropertyAnimator
larunningPropertyAnimator(withDuration:delay:options:animations:completion:)
méthode de classerunningPropertyAnimator(withDuration:delay:options:animations:completion:)
a la déclaration suivante:Le code Playground ci-dessous montre une implémentation possible de
runningPropertyAnimator(withDuration:delay:options:animations:completion:)
afin d'animer le changement constant d'une contrainte de disposition automatique.la source
Dans mon cas, je n'ai mis à jour que la vue personnalisée.
la source
Regardez ça .
La vidéo dit que vous devez simplement ajouter
self.view.layoutIfNeeded()
comme suit:la source