重置UIButton的框架中心点(具有布局约束)不起作用

时间:2017-09-20 18:04:26

标签: ios swift uiview uiviewcontroller uibutton

这个问题应该有一个简单的解决方案。两个UIButton,添加和删除。可选择隐藏删除。当两个按钮都显示出来时,我希望它们的中心与两侧等距;当只显示添加时,我希望将其置于中心位置。

显示两者时的代码:

let x1 = self.view.frame.width / 3
let x2 = 2.0 * x1
self.addBtn.center.x = x2
self.deleteBtn.center.x = x1
self.deleteBtn.isHidden = false

两个UIButtons都在我的故事板中,具有顶部和底部布局约束。当执行上面的代码时,两个UIButton都会渲染到superview的最左边,而不是上面的x1 / x2位置!当仅渲染“添加”按钮时(使其中心X轴位置是超视图框架的中心),也会向最左侧渲染!

我认为,布局有限,有些东西可疑。为什么垂直布局约束会影响UIButton的X轴位置的手动复位是否有效?

感谢。

1 个答案:

答案 0 :(得分:1)

当您使用AutoLayout时,如果您没有提供一套完整的布局约束,系统将猜测(通常是错误的)并添加约束以使您的视图在其超级视图中具有位置。

激活AutoLayout后,通常会忽略更改视图的位置。相反,您应该添加水平约束,将该约束控制拖动到视图控制器中以创建插座,然后调整约束的常量值以进行调整。

请注意,您应该能够根据视图的中心创建一个固定约束,作为superview中心的一小部分,它将“正常工作”,而根本不需要任何自定义代码。

我刚刚创建了一个测试项目并添加了2个按钮,两个按钮都固定在superview底部的20个点上。我创建了两个约束,使视图中心与superview的中心相同。然后我编辑了两个约束,并使左边的约束成为按钮的中心X和超视图的尾部之间的约束,乘数为0.33。对于右键,我将约束编辑为再次位于按钮的中心和超级视图的尾部之间,但乘数为0.66。无论内容视图的大小如何,都会自动将按钮均匀分隔开。相同的方法适用于任意数量的视图 - 您只需将每个视图的乘数调整为(item_index+1) / (num_items + 1)(对于从零开始的项目索引)