通过调用needsUpdateConstraints及updateConstraintsIfNeeded实现动画更新
第一步:
添加好视图约束,到特定的时候,更新视图约束
第二步:
- 控制器里面
/// 告诉self.view约束需要更新
self.view.needsUpdateConstraints()
/// 调用此方法告诉self.view检测是否需要更新约束,若需要则更新,下面添加动画效果才起作用
self.view.updateConstraintsIfNeeded()
/// 更新动画
UIView.animate(withDuration: 0.5, animations: {
self.view.layoutIfNeeded()
})
- 视图里面
/// 告诉self.view约束需要更新
self.needsUpdateConstraints()
// / 调用此方法告诉self.view检测是否需要更新约束,若需要则更新,下面添加动画效果才起作用
self.updateConstraintsIfNeeded()
/// 更新动画
UIView.animate(withDuration: 0.5, animations: {
self.layoutIfNeeded()
})
相应的方法
setNeedsLayout:告知页面需要更新,但是不会立刻开始更新。执行后会立刻调用layoutSubviews。
layoutIfNeeded:告知页面布局立刻更新。所以一般都会和setNeedsLayout一起使用。如果希望立刻生成新的frame需要调用此方法,利用这点一般布局动画可以在更新布局后直接使用这个方法让动画生效。
layoutSubviews:系统重写布局
setNeedsUpdateConstraints:告知需要更新约束,但是不会立刻开始
updateConstraintsIfNeeded:告知立刻更新约束
updateConstraints:系统更新约束