Antes del layout automático, he estado animando la altura de un background en un proyecto al establecer el marco sobre animateWithDuration
.
func setUpBackground() { self.backgroundView.frame = CGRect(x: 0, y: 0, width: 320, height: 10) self.backgroundView.backgroundColor = UIColorFromRGB(0x2d2d2d).CGColor } func AnimateBackgroundHeight() { UIView.animateWithDuration(0.5, animations: { self.backgroundView.frame = CGRect(x: 0, y: 0, width: 320, height: 600) }) }
Después de convertir mi proyecto al layout automático, noté que la animation se produce, pero la altura del background vuelve a ajustarse al tamaño / estilo original (configuration del generador de interfaces) después. Leí que cuando el layout automático está activado, las restricciones sobrescribirán la configuration de las dimensiones CGRect
con CGRect
.
Por lo tanto, me pregunto cómo lograr el mismo efecto de animation de cambio de altura con el layout automático activado.
Dele a su vista de background una restricción de altura y haga un IBOutlet. En el código, modifique el valor constante de la restricción.
func AnimateBackgroundHeight() { UIView.animateWithDuration(0.5, animations: { self.heightCon.constant = 600 // heightCon is the IBOutlet to the constraint self.view.layoutIfNeeded() }) }
También para aquellos de ustedes que encuentren esta publicación tratando de averiguar por qué una transición que cambia el tamaño de una vista será obstructiva o impura, solo necesita encontrar la vista a cargo y llamar a self.view.layoutIfNeeded()
dentro del bloque UIView.animateWithDuration
. Estaba golpeando mi cabeza contra la panetworking intentando cosas diferentes con limitaciones y haciendo frameworks hasta darme count de que self.view.layoutIfNeeded()
se encargaría de hacer que la transición fuera uniforme, siempre y cuando la estés colocando en la location correcta.