在没有IBOutlets的情况下以编程方式更新布局约束-Swift

时间:2018-09-22 16:40:34

标签: ios swift autolayout hamburger-menu

我试图通过在点击“打开”按钮时更改左锚点约束来制作滑出菜单。我已经看到人们在约束条件下使用IBOutlets来做到这一点,但是我正在使用的视图是完全以编程方式生成的,从而阻止了我这样做。

该视图最初位于屏幕之外,所以我想点击“打开”按钮时就可以更改约束,但是下面的代码不起作用。

@objc func slideMenu() {
    sideMenu.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 0).isActive = true
    view.setNeedsUpdateConstraints()
}

有没有没有IBOutlet的更新左锚约束的方法?

1 个答案:

答案 0 :(得分:5)

将约束存储在变量中,并更改 常数,并在需要动画时调用layoutIfNeeded

// Declare this along with the other variables in your class
var constraintVariable: NSLayoutConstraint!

.
.
.

// Where you set your constraints. Store the constraint to be animated in the variable and make it active
// Your other constraints
constraintVariable = sideMenu.leftAnchor.constraint(equalTo: view.leftAnchor, constant: someNegativeValue);
constraintVariable.isActive = true

.
.
.

@objc func slideMenu() {
    UIView.animate(withDuration: suitableDuration) {
        constraintVariable.constant = requiredValue
        view.layoutIfNeeded()
    }
}