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

yam*_*mbo 2 ios autolayout swift hamburger-menu

我正在尝试通过在点击"打开"按钮时更改左锚点约束来制作滑出菜单.我见过人们在约束上使用IBOutlets来做,但我正在使用的视图是完全以编程方式完成的,阻止我这样做.

视图最初位于屏幕之外,所以我想我可以在点击"打开"按钮时更改约束,但下面的代码什么也没做.

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

有没有办法在没有IBOutlet的情况下更新左锚点约束?

Rak*_*tri 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()
    }
}
Run Code Online (Sandbox Code Playgroud)