Swift 无法通过编程方式调整约束

Swift 无法通过编程方式调整约束,swift,autolayout,Swift,Autolayout,嘿,我有一个这样的设置: 左约束为常数111。我想将此约束更改为20并增加长方体的长度。目前我有: @IBAction func didTapButton(sender: AnyObject) { view.removeConstraint(leadingConstraint) leadingConstraint = NSLayoutConstraint(item: view.superview!, attribute: .Leading, relatedBy

嘿,我有一个这样的设置:

左约束为常数111。我想将此约束更改为20并增加长方体的长度。目前我有:

@IBAction func didTapButton(sender: AnyObject) {

        view.removeConstraint(leadingConstraint)
        leadingConstraint = NSLayoutConstraint(item: view.superview!, attribute: .Leading, relatedBy: .Equal, toItem: greenView, attribute: .Leading, multiplier: 1.0, constant:20)
        view.addConstraint(leadingConstraint)

    }
我最初在
leadingConstraint=NSLayoutConstraint(项:view.superview!,属性:。Leading,relatedBy:。Equal,toItem:greenView,属性:。Trailing,乘数:1.0,常数:20)时出错。
。所以我把这两个属性都改为.Leading和.Leading。现在矩形正在拉伸,但大小不正确,它将离开屏幕:


我做错了什么?(注意:我想通过添加一个新的约束来更改这些约束,而不仅仅是更改常量值。我试图更好地理解!)。任何关于这方面的建议都将不胜感激!谢谢

我应该做的是:

故事板:

  • 创建两个约束(一个用于第一个状态,一个用于结束状态)
  • 更改每个约束的优先级。第一个必须高于第二个,但不能超过1000。第一个是751,第二个是749
  • 为每个约束创建一个IBOutlet
代码:

  • 更改每个约束的优先级(firstConstraint.priority=749,secondConstraint.priority=751)
  • 执行view.LayoutIfNeed()操作
  • 所有这些都必须在主线程中完成

希望它能起作用。

我应该做的是:

故事板:

  • 创建两个约束(一个用于第一个状态,一个用于结束状态)
  • 更改每个约束的优先级。第一个必须高于第二个,但不能超过1000。第一个是751,第二个是749
  • 为每个约束创建一个IBOutlet
代码:

  • 更改每个约束的优先级(firstConstraint.priority=749,secondConstraint.priority=751)
  • 执行view.LayoutIfNeed()操作
  • 所有这些都必须在主线程中完成

希望它能起作用。

尝试使用常量
-20
而不是
20
,或者在设置
引导约束时交换视图尝试使用常量
-20
而不是
20
或者在设置
引导约束时交换视图
是的,将其更改为-20。您还可以激活/停用约束,而不是添加/删除约束。是的,将其更改为-20。您还可以激活/停用约束,而不是添加/删除约束。这不是对您的问题的回答,而是对未来的一个好建议:永远不要使用
view.addConstraint(someConstraints)
!而是使用
NSLayoutConstraint.activateConstraints(someConstraints)
someConstraint.active=true
这不是对你问题的回答,而是对未来的一个好建议:永远不要使用
view.addConstraint(someConstraints)
!而是使用
NSLayoutConstraint.activateConstraints(someConstraints)
someConstraint.active=true