【问题标题】:Resetting frame center point for UIButton (with layout constraints) does not work重置 UIButton 的框架中心点(具有布局约束)不起作用
【发布时间】:2018-03-01 22:06:01
【问题描述】:

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

同时显示时的代码:

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

两个 UIButton 都在我的故事板中,具有顶部和底部布局约束。执行上述代码时,两个 UIButton 都呈现在超级视图的最左侧,而不是上面的 x1/x2 位置!当只渲染 Add 按钮时(使得它的中心 X 轴位置是 superview 框架的中心),也被渲染到最左边!

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

谢谢。

【问题讨论】:

  • 我想我已经回答了我自己的问题。见related article。这个想法是,如果涉及布局约束,那么您可以在逻辑中修改约束以重新定位 UIButton,无论它们位于超级视图的 X 轴上的任何位置。

标签: ios swift uiview uiviewcontroller uibutton


【解决方案1】:

当你使用 AutoLayout 时,如果你没有提供一套完整的布局约束,系统会猜测(通常是错误的)并添加约束来给你的视图在它的父视图中的位置。

启用自动布局后,更改视图的位置通常会被忽略。相反,您应该添加一个水平约束,将该约束控制拖动到您的视图控制器中以创建一个出口,然后调整约束的常量值以进行调整。

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

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

【讨论】:

    猜你喜欢
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2014-01-24
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    相关资源
    最近更新 更多