更新约束后按钮位置不正确自动布局
问题描述:
我被一个奇怪的自动布局错误卡住了。更新约束后按钮位置不正确自动布局
我有两个按钮(确认和删除)并排,在相同的视图中,每个都取自己的超视图的50%的宽度,在某些情况下(当test = true时),我想隐藏确认按钮所以删除按钮会占用屏幕的所有宽度。
这里是我的自动布局:
确认按钮:
删除按钮:
镨比例宽度是超视图的50%(1:2)。现在,这里是我的电话,在viewWillAppear
发生:
if test {
self.confirmButtonWidthConstraint.constant = 0
self.deleteButtonWidthConstraint.constant = (self.deleteButton.superview?.frame.width)!
}
但是,这样做在此之后的结果:
和检查UI调试后,我可以看到,奇怪的是,这现在删除按钮的宽度为... 480,起始x为-160。所以我不知道这里发生了什么。请帮忙!
答
我可以提出一个不同的策略吗?
将按钮设置为堆叠视图(UIStackView
),并将按钮设置为平等填充。
然后你可以设置你的按钮消失与button.isHidden = true
。堆栈视图将优雅地处理你的布局。
+0
完美地工作!谢谢 – Someday
答
你已经按比例设置的宽度,但正在更新的约束constant
财产。这将需要导致您期望的结果,因为比例宽度将简单地将constant
值添加到乘数结果中。
相反,您应该设置您的约束的multiplier
属性。例如:
if test {
self.confirmButtonWidthConstraint.multiplier = 0.0
self.deleteButtonWidthConstraint.multiplier = 1.0
}
如果您的约束使用Autolayout确定的数据(例如视图的宽度),则应根据确切用例在'viewDidLayoutSubviews()'或'viewWillLayoutSubviews()'中调用相关代码。 –
感谢您的回答。我尝试过,但仍得到相同的结果。 – Someday