无法以编程方式调整约束

时间:2016-04-19 08:28:22

标签: swift autolayout

嘿,我有这样的设置:

enter image description here

左边约束是常数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(item: view.superview!, attribute: .Leading, relatedBy: .Equal, toItem: greenView, attribute: .Trailing, multiplier: 1.0, constant:20)时遇到错误。所以我把它改成了.Leading和.Leading这两个属性。现在矩形正在伸展,但它的尺寸不正确,它会离开屏幕:

enter image description here

我在这里做错了什么? (注意:我想通过添加新约束来改变这些约束,而不仅仅是简单地改变常数值。我试图更好地理解!)。任何关于此的指针将不胜感激!感谢

2 个答案:

答案 0 :(得分:1)

我应该做的是:

故事板:

  • 创建2个约束(一个用于第一个状态,一个用于结束状态)。
  • 更改每个约束的优先级。第一个必须高于第二个,但不能高于1000个。让第一个说751,第二个说749。
  • 为每个约束创建一个IBOutlet。

代码:

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

希望它有效。

答案 1 :(得分:1)

尝试使用常量-20代替20,或在设置leadingConstraint时与您交换意见。