答案 0 :(得分:3)
答案 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)
答案 3 :(得分:1)
你可以这样做:
(不要忘记缺少的限制,例如按钮和顶视图之间的顶部空间)
编辑我不建议将无用的视图添加为容器。这是不好的做法。乘数是可行的方法。
答案 4 :(得分:1)
答案 5 :(得分:0)
使用的信息较少,但您可以通过编程方式添加约束以添加左侧空格 - x约束以到达页面中间。 您还可以在一个小视图中获取这两个按钮,这样可以更容易在中间对齐