我做了一个例子,我已经采取了像
这样的2个常数topconstarints = 150,优先级为999
和
top2constraint = 0且优先级为998
当我改变
的优先级时topconstarints.priority = 998
和
top2constraint.priority = 999
然后我调用updateConstraintsIfNeeded()然后它不动画更改,但如果约束优先级为1000,如果我更改了约束然后它正在工作,那么任何人都可以解释我在这里发生了什么
答案 0 :(得分:2)
几周以前在这里有一个类似的question,我正在玩它,似乎你不能通过改变约束的优先级来为视图设置动画。
如果约束之间的差异仅在于它们的常量,则有两个选项。
只有一个约束,只需更改其常量。
保留两个约束,但始终只激活一个约束:
topconstraint = ... // create a constraint 1
topconstraint.isActive = true // activate it
top2constraint = ... // also create it and keep it, but don't activate it
然后,当你想要改变动画时:
self.view.layoutIfNeeded() // just in case there are still some old changes to the autolayout
topconstraint.isActive = false // deactivate the old one
top2constraint.isActive = true // activate the new one
self.view.setNeedsLayout() // tell the auto layout that changes have been made
UIView.animate(withDuration: 0.4) {
// and then finally animate the changes
self.view.layoutIfNeeded()
}