使用Swift动画约束更改(第二项)?

时间:2015-08-04 16:38:38

标签: ios swift interface-builder uiviewanimation nslayoutconstraint

我在IB中定义了一个约束,如下所示。如何以编程方式动画将此约束中的“第二项”更改为另一个对象(有效地将第一项移到屏幕上)。

enter image description here

这是我尝试过的代码 - 其中“categoryTableViewTop”是NSLayoutConstraint。我收到错误“无法分配给这个表达式的结果”。

func expandCategory(button: UIButton) {
    tableView2.animateWithDuration(0.5, animations: {
       categoryTableViewTop.secondItem = categoryHeader.top
    })
}

2 个答案:

答案 0 :(得分:3)

约束不允许您更改代码中的secondItem,因为它是只读属性。

我没有尝试使用动画,但是对于其他动态布局,可以在界面构建器中使用不同的secondItem创建两个不同的约束,并在代码中更改它们的优先级。如果相同的方法适用于动画,您可以尝试。

使用优先级750和250,因为这些约束被视为选项。

答案 1 :(得分:2)

您没有更改代码中的约束常量。你必须改变它:

categoryTableViewTop.secondItem.constant = categoryHeader.top.constant

我认为来自约束的secondItemtopIBOutlets

要修改约束的动画,你必须这样做:

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