Обновление ограничений макета программно без IBOutlets - Swift - PullRequest
0 голосов
/ 22 сентября 2018

Я пытаюсь сделать слайд-меню, изменив левую привязку при нажатии кнопки «Открыть».Я видел, как люди делают это, используя IBOutlets для ограничений, но представление, с которым я работаю, полностью программно, что мешает мне сделать это.

Представление изначально расположено вне экрана, поэтому я подумалЯ мог просто изменить ограничение, когда нажал кнопку «открыть», но код ниже ничего не делает.

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

Есть ли способ обновить ограничение левой привязки без IBOutlet?

1 Ответ

0 голосов
/ 22 сентября 2018

Сохраните ограничение в переменной и , измените константу и при необходимости вызовите 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()
    }
}
...