将 UIButtons 分组为一个层并水平居中

Grouping UIButtons as a Layer and Horizontally Center

我在屏幕上以编程方式创建和放置了 2 个按钮。

let myButton1 = UIButton()
let myButton2 = UIButton()

let myButton1Frame = CGRectMake(anotherField.origin.x + 20, anotherField.origin.y + 80, 30, 30)
myButton1.frame = myButton1Frame

var myButton2Frame = myButton1Frame
myButton2Frame.origin.x += 130 
myButton2.frame = myButton2Frame

self.view.addSubview(myButton1)
self.view.addSubview(myButton2)

我试图在视觉上实现的是...

|        AnotherField      |
|                          |
|     myBtn1     myBtn2    |

我尝试实现的目标在 Simulator 上运行良好,但我相信有一种更聪明的方法可以通过使用约束来实现它。


我想如果我能设法将 myButton1myButton2 分组,我可以只给 +y 原点分组,然后通过给按钮一个距离 x 彼此 (我的意思是,2 个按钮之间的距离 - 希望这是有道理的)

正确的做法是什么?或者我有更好的方法来实现这一目标吗?

我的建议是将两个按钮都放入一个容器视图中,并将该容器置于父视图的中心。

所以它看起来像这样:

+--------------------------------+
|+--------------++--------------+|
||   Button1    ||    Button 2  ||
|+--------------++--------------+|
+--------------------------------+

因此您需要完成以下步骤:

  • 添加将包含按钮的视图容器 ("button container")
  • 将两个按钮添加到上述容器中
  • 从按钮向封闭容器视图添加完全令人满意的约束。
  • 从容器视图添加水平居中约束 到超级视图(例如您的控制器视图)。

您在问题标签中指定了自动布局和布局约束,所以我假设您使用了自动布局(您的代码没有使用自动布局或约束,这就是我提出这个问题的原因)。

约束(如果在按钮和容器视图之间正确设置)应该适当地调整容器视图的大小,一旦容器视图完成布局,容器父视图的水平约束也会起作用,有效地居中容器,因此还有你的两个按钮。

我希望这能让事情变得清晰,如果您需要进一步的帮助或者还有什么不清楚的地方,请告诉我。