Ios 以编程方式更新布局约束,而不使用IBOutlets-Swift
当点击“打开”按钮时,我试图通过改变左锚约束来制作一个滑出菜单。我见过有人在约束上使用IBOutlets,但我使用的视图完全是以编程方式创建的,因此我无法这样做 视图最初位于屏幕外,所以我想我可以在点击“打开”按钮时更改约束条件,但下面的代码没有任何作用Ios 以编程方式更新布局约束,而不使用IBOutlets-Swift,ios,swift,autolayout,hamburger-menu,Ios,Swift,Autolayout,Hamburger Menu,当点击“打开”按钮时,我试图通过改变左锚约束来制作一个滑出菜单。我见过有人在约束上使用IBOutlets,但我使用的视图完全是以编程方式创建的,因此我无法这样做 视图最初位于屏幕外,所以我想我可以在点击“打开”按钮时更改约束条件,但下面的代码没有任何作用 @objc func slideMenu() { sideMenu.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 0).isActive = true vie
@objc func slideMenu() {
sideMenu.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 0).isActive = true
view.setNeedsUpdateConstraints()
}
有没有办法在不使用IBOutlet的情况下更新左锚定约束?将约束存储在变量中并更改常量,并在需要时调用
LayoutIfNeed
// 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.setNeedsLayout()
view.layoutIfNeeded()
}
}
那么,我是否使用
constraintVariable
来设置视图的初始约束?使视图远离屏幕的初始约束?@yambo查看答案中的第二行代码。你应该能够找到合适的位置。我也提供了适当的评论。很抱歉我的误解。在设置初始约束的设置功能中,我将leftAnchor
约束设置为屏幕外,以便隐藏视图。正如您的评论所说,我添加了一行代码来设置约束变量,并用您提供的代码更改了@objc函数,但当点击按钮时,什么也没有发生。@yambo-ah我知道了。设置约束时。将常量值设置为某个负值,就像现在一样。除此之外,不要将其设置为活动,而是将其存储在变量中并使用该变量将其设置为活动。谢谢!再次为误会感到抱歉。这很好用