当我更改约束的优先级时,更改不会使用UpdateconstraintIfNeeded进行动画处理

时间:2018-01-17 05:23:45

标签: ios swift swift3 autolayout

我做了一个例子,我已经采取了像

这样的2个常数

topconstarints = 150,优先级为999

top2constraint = 0且优先级为998

当我改变

的优先级时
topconstarints.priority = 998

top2constraint.priority = 999

然后我调用updateConstraintsIfNeeded()然后它不动画更改,但如果约束优先级为1000,如果我更改了约束然后它正在工作,那么任何人都可以解释我在这里发生了什么

1 个答案:

答案 0 :(得分:2)

几周以前在这里有一个类似的question,我正在玩它,似乎你不能通过改变约束的优先级来为视图设置动画。

如果约束之间的差异仅在于它们的常量,则有两个选项。

  1. 只有一个约束,只需更改其常量。

  2. 保留两个约束,但始终只激活一个约束:

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