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

Ios 将UIButton分组为一个层并水平居中,ios,swift,autolayout,constraints,nslayoutconstraint,Ios,Swift,Autolayout,Constraints,Nslayoutconstraint,我在屏幕上有两个按钮,我通过编程创建和放置它们 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 myBut

我在屏幕上有两个按钮,我通过编程创建和放置它们

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    |
我试图实现的东西在模拟器上运行正常,但我相信有一种更聪明的方法可以通过使用约束来实现它


我想如果我能将
myButton1
myButton2
分组,我就可以将
+y
作为组的原点,然后通过给按钮之间的距离
x
水平居中(我的意思是,两个按钮之间的距离-希望这是有意义的)


正确的方法是什么?还是有更好的方法让我实现这一目标

我的建议是,将两个按钮都放在容器视图中,并将容器置于superview的中心

所以它看起来像这样:

+--------------------------------+
|+--------------++--------------+|
||   Button1    ||    Button 2  ||
|+--------------++--------------+|
+--------------------------------+
因此,您需要完成以下步骤:

  • 添加将包含按钮的视图容器(“按钮容器”)
  • 将这两个按钮添加到前面提到的容器中
  • 将完全满足的约束从按钮添加到封闭容器视图
  • 从容器视图添加水平中心约束 到superview(例如控制器的视图)
您在问题标签中指定了自动布局和布局约束,因此我假设您使用自动布局(您的代码没有使用自动布局或约束,这就是我提出此问题的原因)

约束(如果在按钮和容器视图之间正确设置)应适当调整容器视图的大小,并且一旦容器视图完成布局,容器superview的水平约束也将发挥作用,从而有效地使容器居中,并因此使两个按钮都居中


我希望这能让事情变得清楚,如果你需要进一步的帮助或者有些事情还不清楚,请告诉我

我的建议是,将两个按钮都放在容器视图中,并将容器置于superview的中心

所以它看起来像这样:

+--------------------------------+
|+--------------++--------------+|
||   Button1    ||    Button 2  ||
|+--------------++--------------+|
+--------------------------------+
因此,您需要完成以下步骤:

  • 添加将包含按钮的视图容器(“按钮容器”)
  • 将这两个按钮添加到前面提到的容器中
  • 将完全满足的约束从按钮添加到封闭容器视图
  • 从容器视图添加水平中心约束 到superview(例如控制器的视图)
您在问题标签中指定了自动布局和布局约束,因此我假设您使用自动布局(您的代码没有使用自动布局或约束,这就是我提出此问题的原因)

约束(如果在按钮和容器视图之间正确设置)应适当调整容器视图的大小,并且一旦容器视图完成布局,容器superview的水平约束也将发挥作用,从而有效地使容器居中,并因此使两个按钮都居中


我希望这能让事情变得清楚,如果你需要进一步的帮助或者有些事情还不清楚,请告诉我

非常感谢你的回答!我没有使用故事板,而是通过编程尝试创建按钮。这就是事情变得混乱的原因。有没有一种方法可以在不添加额外containerview的情况下纯粹通过编程实现这一点/您可以通过编程方式添加容器视图和约束,但这需要相当多的代码……当然有一种方法可以在没有约束(或容器视图)的情况下进行添加,但我不建议您亲自使用该方法。您也可以只对按钮进行基本的数学运算,然后将其居中。在iOS中,我认为Android中没有布局或组的概念,所以你必须坚持用黑客的方式实现它(简单地根据大小计算它们的位置),或者像我建议的那样使用约束和容器视图,我认为这更灵活。非常感谢你的回答!我没有使用故事板,而是通过编程尝试创建按钮。这就是事情变得混乱的原因。有没有一种方法可以在不添加额外containerview的情况下纯粹通过编程实现这一点/您可以通过编程方式添加容器视图和约束,但这需要相当多的代码……当然有一种方法可以在没有约束(或容器视图)的情况下进行添加,但我不建议您亲自使用该方法。您也可以只对按钮进行基本的数学运算,然后将其居中。我认为,在iOS中没有像Android中那样的布局或组的概念,所以你必须坚持用黑客的方式实现它(简单地根据大小计算它们的位置),或者像我建议的那样使用约束和容器视图,我认为这更灵活。