设置两个UIButton约束?

时间:2016-07-06 12:25:51

标签: ios swift autolayout constraints

我无法将两个按钮的约束设置为彼此相邻。我需要在UIView中间的这两个按钮。见下图enter image description here

可以知道如何设置这些按钮约束吗?

6 个答案:

答案 0 :(得分:3)

这里我设置了相同的约束:

1)将按钮嵌入UIView&设置该视图的约束。 enter image description here

2)为第一个按钮设置约束 enter image description here

3)设置第二个按钮的约束 enter image description here

答案 1 :(得分:2)

您无需创建额外的UIView来解决此问题!

来自UILayoutGuide文档:

  

将虚拟视图添加到视图层次结构中会产生许多成本。首先,创建和维护视图本身是成本。其次,虚拟视图是视图层次结构的完整成员,这意味着它会增加层次结构执行的每个任务的开销。最糟糕的是,隐形虚拟视图可以拦截用于其他视图的消息,从而导致很难找到的问题。

您可以使用UILayoutGuide来执行此操作;而不是将按钮添加到不必要的UIView。您在按钮的左侧和右侧放置UILayoutGuide并将它们的宽度设置为相等。这将使按钮居中。以下是如何在代码中执行此操作:

view.addSubview(button1)
view.addSubview(button2)

let leftSpace = UILayoutGuide()
view.addLayoutGuide(leftSpace)

let rightSpace = UILayoutGuide()
view.addLayoutGuide(rightSpace)

let views = [
    "leftSpace" : leftSpace,
    "button1" : button1,
    "button2" : button2,
    "rightSpace" : rightSpace
]

NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[leftSpace][button1]-[button2][rightSpace]|", options: [], metrics: nil, views: views))
leftSpace.widthAnchor.constraintEqualToAnchor(rightSpace.widthAnchor).active = true

我省略了垂直约束,因为你只关心水平居中,但你需要垂直约束。我确信在故事板中也可以做到类似的事情。

编辑Objective-C

[self.view addSubview:button1];
[self.view addSubview:button2];

UILayoutGuide *leftSpace = [[UILayoutGuide alloc] init];
[self.view addLayoutGuide:leftSpace];

UILayoutGuide *rightSpace = [[UILayoutGuide alloc] init];
[self.view addLayoutGuide:rightSpace];

NSDictionary* views = @{
                       @"leftSpace" : leftSpace,
                       @"button1" : button1,
                       @"button2" : button2,
                       @"rightSpace" : rightSpace
                         };

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[leftSpace][button1]-[button2][rightSpace]|" options:0 metrics:nil views:views]];

[[leftSpace.widthAnchor constraintEqualToAnchor:rightSpace.widthAnchor] setActive:YES];

答案 2 :(得分:2)

选择两个按钮并在UIView中嵌入这两个按钮, embed UIView
水平中心对齐UIView, 为UIView设置宽度,高度和顶部约束。

你会得到这个:

enter image description here

Sample project for this

答案 3 :(得分:1)

你可以这样做:

  • 为两个按钮定义一个水平间距,例如10,例如
  • 在左侧按钮上水平设置中心到顶视图,在此约束上将乘数设置为1/2

(不要忘记缺少的限制,例如按钮和顶视图之间的顶部空间)

编辑我不建议将无用的视图添加为容器。这是不好的做法。乘数是可行的方法。

答案 4 :(得分:1)

  1. 在视图中嵌入这两个视图(在设计器中,只需选择两个视图,然后从xcode菜单中选择编辑器 - >嵌入 - >视图)
  2. 在容器视图上应用约束,以便在容器中水平居中视图
  3. 最终,您可以在容器视图之间对ViewController的视图
  4. 应用顶部约束

答案 5 :(得分:0)

使用的信息较少,但您可以通过编程方式添加约束以添加左侧空格 - x约束以到达页面中间。 您还可以在一个小视图中获取这两个按钮,这样可以更容易在中间对齐