更改约束第二项

时间:2016-02-18 11:16:49

标签: ios swift constraints

enter image description here

我有这种约束的观点。我想为它设置动画并移至NavigationBar的底部。所以我想将Second item属性更改为这样的内容:

UIView.animateWithDuration(15.5, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {
    if (self.isViewLoaded() && self.view.window != nil) {
         //How to set bottom item ?
         self.storeSelectViewVerticalContainerConstraint.secondItem = self.navigationController?.view.bottom
         self.view.layoutIfNeeded()
    }
}, completion: {(Bool) in})

此代码返回错误:

  

无法分配给属性:'secondItem'是一个只用属性

或者,如果此方法不可行,如何计算,并使用导航栏将对象从中间移动到顶部。

2 个答案:

答案 0 :(得分:15)

您可以添加第二个具有较低优先级的约束来启动,然后在需要时更新这两个优先级:

UIView.animateWithDuration(15.5, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {
    if (self.isViewLoaded() && self.view.window != nil) {
         self.storeSelectViewVerticalContainerConstraint.priority = UILayoutPriorityDefaultLow
         self.storeSelectViewTopContainerConstraint.priority = UILayoutPriorityDefaultHigh
         self.view.layoutIfNeeded()
    }
}, completion: {(Bool) in})

请记住,不要将优先级从必需移动到不需要,因为that's not allowed。但是从可选值移动到另一个可选值是可以的。

或者,您可以删除/添加这些约束,而不是更改其优先级。

答案 1 :(得分:2)

这里的第二项是UIView(主根视图),它是Y轴固定的。它无法改变。

如果您想要商店选择视图的动画,您应该将其常量从一个值更改为另一个值,然后执行

storeSelectViewVerticalContainerConstraint.constant = 0; // or any value you want.
UIView.animateWithDuration(5) {
    self.view.layoutIfNeeded()
}

感谢。 快乐的编码!