我在IB中定义了一个约束,如下所示。如何以编程方式动画将此约束中的“第二项”更改为另一个对象(有效地将第一项移到屏幕上)。
这是我尝试过的代码 - 其中“categoryTableViewTop”是NSLayoutConstraint。我收到错误“无法分配给这个表达式的结果”。
func expandCategory(button: UIButton) {
tableView2.animateWithDuration(0.5, animations: {
categoryTableViewTop.secondItem = categoryHeader.top
})
}
答案 0 :(得分:3)
约束不允许您更改代码中的secondItem,因为它是只读属性。
我没有尝试使用动画,但是对于其他动态布局,可以在界面构建器中使用不同的secondItem创建两个不同的约束,并在代码中更改它们的优先级。如果相同的方法适用于动画,您可以尝试。
使用优先级750和250,因为这些约束被视为选项。
答案 1 :(得分:2)
您没有更改代码中的约束常量。你必须改变它:
categoryTableViewTop.secondItem.constant = categoryHeader.top.constant
我认为来自约束的secondItem
和top
是IBOutlets
要修改约束的动画,你必须这样做:
self.view.layoutIfNeeded()
UIView.animateWithDuration(5, animations: { _ in
// change your constraints here
myTopConstraint.constant = 50.0
self.view.layoutIfNeeded()
}, completion: nil)
有关详细信息,请参阅this answer或此guide from the docs。