我遇到了自动布局的一个奇怪的错误。
我有两个按钮(确认和删除)并排,在同一视图中,每个按钮的宽度超过其超视图的50%,在某些情况下(当test = true时),我想要隐藏确认按钮,以便删除按钮占据屏幕的所有宽度。
这是我的自动布局:
确认按钮:
删除按钮:
比例宽度是superview的50%(1:2)。现在这是我的电话,发生在viewWillAppear
:
if test {
self.confirmButtonWidthConstraint.constant = 0
self.deleteButtonWidthConstraint.constant = (self.deleteButton.superview?.frame.width)!
}
然而,这样做之后是结果:
在检查了UI调试器之后,我可以看到奇怪的是,这个删除按钮现在的宽度为... 480,起始x为-160。所以我真的不知道这里发生了什么。请帮忙!
答案 0 :(得分:3)
我可以提出一个不同的策略吗?
将按钮嵌入堆栈视图(UIStackView
),按钮设置为均匀填充。
然后,您可以将按钮设置为button.isHidden = true
消失。堆栈视图将优雅地处理您的布局。
答案 1 :(得分:2)
您已按比例设置宽度,但正在更新约束constant
属性。这将需要导致您想要的结果,因为比例宽度将简单地将constant
值添加到乘数结果。
相反,您应该设置约束的multiplier
属性。例如:
if test {
self.confirmButtonWidthConstraint.multiplier = 0.0
self.deleteButtonWidthConstraint.multiplier = 1.0
}