【问题标题】:simple programmatic modification of a single IB constraint not updating单个 IB 约束的简单编程修改不更新
【发布时间】:2017-01-19 14:24:12
【问题描述】:

编辑:看来我需要更改乘数而不是常数。

我正在尝试在某个事件发生后以编程方式更改 viewDidLoad 之外的按钮的宽度(如果这很重要)。

我已将 IB 中的按钮宽度设置为等于视图宽度。

我已经为按钮宽度约束创建了一个 IB 插座:

@IBOutlet weak var imageButtonWidth: NSLayoutConstraint!

那我试过了:

 imageButtonWidth.constant = 0.49
    view.setNeedsLayout()

 imageButtonWidth.constant = 0.49
    view.layoutIfNeeded()

imageButtonWidth.constant = 0.49
    self.view.updateConstraints()

我在 imageButtonWidth.constant = 0.49 处设置了一个断点,它使应用程序崩溃,所以我知道它正在“运行”它只是没有正确激活。

我用过

imageButtonWidth.constant = 0.49
    self.view.updateConstraints()

在另一个应用程序上的 viewdidload 中没有问题,但如果调用在 viewdidload 之外,它似乎不会被确认。

任何建议将不胜感激!

【问题讨论】:

  • 0.49 的宽度常数会给你一个小于 1 磅宽的按钮。你确定这是正确的值吗?您是否在控制台中看到任何约束错误?
  • 没有没有错误。它略小于视图的一半,其中要查看的按钮的宽度完全相等将是常数 1。感谢您的响应!
  • 你把常数误认为是乘数,我想。您无法更改乘数。
  • 是的,你是对的,但必须有办法改变它。
  • 你必须禁用约束,创建一个新的,然后激活它。

标签: ios swift swift3


【解决方案1】:

正确的做法是使用

 self.view.layoutIfNeeded()

要更新约束,但您可能连接了错误的插座,因为约束的值似乎很低。

【讨论】:

  • 啊哇,我刚刚回顾了我的 IB,我实际上需要更改乘数,而不是常数。但似乎乘数是只读的。
  • 很酷,所以如果你设法解决了你的问题,你应该回答你自己的问题,这样其他人也可以看到解决方案。如果不是...您更改约束的方式是使用常量并将其分配一个新值,然后运行 ​​self.view.layoutIfNeeded()
猜你喜欢
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
相关资源
最近更新 更多