Poyi Poyi - 3 months ago 14
Swift Question

Animate UIView height when using auto layout with swift

Before Auto-layout, I've been animating a background's height in a project by setting the frame over

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)
})
}


After I converted my project to auto layout, I noticed that the animation occurs but the background height snaps back to the original size/style (interface builder setting) after. I read that when Auto-layout is turned on, the constraints will overwrite setting the
UIView
dimensions with
CGRect
.

Therefore I'm wondering how to go about achieving the same height change animation effect with Auto-layout ON.

Answer

Give your backgroundView a height constraint, and make an IBOutlet to it. In code, modify the constraint's constant value.

func AnimateBackgroundHeight() {
    UIView.animateWithDuration(0.5, animations: {
         self.heightCon.constant = 600 // heightCon is the IBOutlet to the constraint
         self.view.layoutIfNeeded()    
    })
}