Tengo un UITextField que quiero ampliar su ancho cuando se toca. Configuré las restricciones y me aseguré de que la restricción de la izquierda tenga la prioridad más baja que la que estoy tratando de animar en el lado derecho.
Aquí está el código que estoy tratando de usar.
// move the input box
UIView.animateWithDuration(10.5, animations: {
self.nameInputConstraint.constant = 8
}, completion: {
(value: Bool) in
println(">>> move const")
})
Esto funciona, pero parece ocurrir instantáneamente y no parece haber ningún movimiento. Traté de configurarlo 10 segundos para asegurarme de que no me faltaba nada, pero obtuve los mismos resultados.
nameInputConstraint es el nombre de la restricción que controlo arrastrado para conectarme a mi clase desde IB.
Gracias de antemano por su ayuda!
xcode
swift
constraints
xcode6
icekomo
fuente
fuente
Respuestas:
Primero debe cambiar la restricción y luego animar la actualización.
Swift 2
Swift 3, 4, 5
fuente
self
utilizado en el cierre.SWIFT 4.x:
Ejemplo con finalización:
fuente
Es muy importante señalar que solo se
view.layoutIfNeeded()
aplica a las subvistas de vista.Por lo tanto, para animar la restricción de la vista, es importante invocarla en la vista general de la vista para animar de la siguiente manera:
Un ejemplo para un diseño simple de la siguiente manera:
fuente
Con Swift 5 y iOS 12.3, según sus necesidades, puede elegir una de las 3 formas siguientes para resolver su problema.
# 1 Usando
UIView
elanimate(withDuration:animations:)
método de claseanimate(withDuration:animations:)
tiene la siguiente declaración:El siguiente código de Playground muestra una posible implementación de
animate(withDuration:animations:)
para animar el cambio constante de una restricción de diseño automático.# 2 Usando
UIViewPropertyAnimator
elinit(duration:curve:animations:)
iniciador y elstartAnimation()
métodoinit(duration:curve:animations:)
tiene la siguiente declaración:El siguiente código de Playground muestra una posible implementación de
init(duration:curve:animations:)
ystartAnimation()
para animar el cambio constante de una restricción de diseño automático.# 3 Usando
UIViewPropertyAnimator
elrunningPropertyAnimator(withDuration:delay:options:animations:completion:)
método de claserunningPropertyAnimator(withDuration:delay:options:animations:completion:)
tiene la siguiente declaración:El siguiente código de Playground muestra una posible implementación de
runningPropertyAnimator(withDuration:delay:options:animations:completion:)
para animar el cambio constante de una restricción de diseño automático.fuente
En mi caso, solo actualicé la vista personalizada.
fuente
Mira este .
El video dice que solo necesita agregar
self.view.layoutIfNeeded()
lo siguiente:fuente