更新约束后,按钮未正确定位自动布局

时间:2017-09-25 16:14:20

标签: ios swift autolayout

我遇到了自动布局的一个奇怪的错误。

我有两个按钮(确认和删除)并排,在同一视图中,每个按钮的宽度超过其超视图的50%,在某些情况下(当test = true时),我想要隐藏确认按钮,以便删除按钮占据屏幕的所有宽度。

这是我的自动布局:

enter image description here

确认按钮:

enter image description here

删除按钮:

enter image description here

比例宽度是superview的50%(1:2)。现在这是我的电话,发生在viewWillAppear

if test {
    self.confirmButtonWidthConstraint.constant = 0
    self.deleteButtonWidthConstraint.constant = (self.deleteButton.superview?.frame.width)!
}

然而,这样做之后是结果:

enter image description here

在检查了UI调试器之后,我可以看到奇怪的是,这个删除按钮现在的宽度为... 480,起始x为-160。所以我真的不知道这里发生了什么。请帮忙!

enter image description here

2 个答案:

答案 0 :(得分:3)

我可以提出一个不同的策略吗?

将按钮嵌入堆栈视图(UIStackView),按钮设置为均匀填充。

然后,您可以将按钮设置为button.isHidden = true消失。堆栈视图将优雅地处理您的布局。

答案 1 :(得分:2)

您已按比例设置宽度,但正在更新约束constant属性。这将需要导致您想要的结果,因为比例宽度将简单地将constant值添加到乘数结果。

相反,您应该设置约束的multiplier属性。例如:

if test {
    self.confirmButtonWidthConstraint.multiplier = 0.0
    self.deleteButtonWidthConstraint.multiplier = 1.0
}