我有这种约束的观点。我想为它设置动画并移至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'是一个只用属性
或者,如果此方法不可行,如何计算,并使用导航栏将对象从中间移动到顶部。
答案 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()
}
感谢。 快乐的编码!