单个 IB 约束的简单编程修改不更新
Posted
技术标签:
【中文标题】单个 IB 约束的简单编程修改不更新【英文标题】:simple programmatic modification of a single IB constraint not updating 【发布时间】: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。感谢您的响应! 你把常数误认为是乘数,我想。您无法更改乘数。 是的,你是对的,但必须有办法改变它。 你必须禁用约束,创建一个新的,然后激活它。 【参考方案1】:正确的做法是使用
self.view.layoutIfNeeded()
要更新约束,但您可能连接了错误的插座,因为约束的值似乎很低。
【讨论】:
啊哇,我刚刚回顾了我的 IB,我实际上需要更改乘数,而不是常数。但似乎乘数是只读的。 很酷,所以如果你设法解决了你的问题,你应该回答你自己的问题,这样其他人也可以看到解决方案。如果不是...您更改约束的方式是使用常量并将其分配一个新值,然后运行 self.view.layoutIfNeeded()以上是关于单个 IB 约束的简单编程修改不更新的主要内容,如果未能解决你的问题,请参考以下文章