在自动布局之前,我通过将框架设置为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)
})
}
在我将项目转换为自动布局后,我注意到动画发生但背景高度在之后快速恢复到原始大小/样式(界面构建器设置)。我看到,当启用自动布局时,约束将覆盖使用UIView
设置CGRect
尺寸。
因此,我想知道如何在自动布局开启的情况下实现相同的高度变化动画效果。
答案 0 :(得分:47)
为backgroundView提供高度约束,并为其创建一个IBOutlet。在代码中,修改约束的常量值。
func AnimateBackgroundHeight() {
UIView.animateWithDuration(0.5, animations: {
self.heightCon.constant = 600 // heightCon is the IBOutlet to the constraint
self.view.layoutIfNeeded()
})
}
答案 1 :(得分:5)
对于那些发现这篇文章的人来说,试图弄清楚为什么转换更改视图的大小将是块状或不干净的,你只需找到负责的视图并调用self.view.layoutIfNeeded()
内部UIView.animateWithDuration
块。我正在撞墙,尝试不同的约束和制作框架,直到意识到只要你把它放在正确的位置,self.view.layoutIfNeeded()
将处理过渡平滑。