代码如下, 当你修改完约束之后添加动画之前, 你需要事先调用一次self.view.layoutIfNeeded
.
它能确保在动画过程之中只有你修改的约束,会被加上动画效果.
否者其他view发生变化的时候也会被这个动画影响.
...
self.view.layoutIfNeeded()
topInfosViewHeight.constant = 102
UIView.animateWithSpring({
self.view.layoutIfNeeded()
})
...
extension UIView {
class func animateWithSpring(animate: ()->Void) {
animateWithDuration(0.7, delay: 0, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.7, options: .LayoutSubviews, animations: animate, completion: nil)
}
}
Referencer: Best practice for modifying storyboard auto layout constraints in code