设置两个 UIButton 约束? [关闭]
Posted
技术标签:
【中文标题】设置两个 UIButton 约束? [关闭]【英文标题】:Set two UIButton constraints? [closed] 【发布时间】:2016-07-06 12:25:51 【问题描述】:我无法设置相邻的两个按钮的约束。我需要 UIView 中间的这两个按钮。见下图
有人知道如何设置这些按钮约束吗?
【问题讨论】:
【参考方案1】:这里我设置了相同的约束:
1) 将按钮嵌入 UIView 并为该视图设置约束。
2)为第一个按钮设置约束
3)为第二个按钮设置约束
【讨论】:
【参考方案2】:选择两个按钮并将这两个按钮嵌入到 UIView 中, 水平居中对齐的 UIView, 为 UIView 设置宽度、高度和顶部约束。
你会得到这个:
Sample project for this
【讨论】:
【参考方案3】:您无需创建额外的UIView
即可解决此问题!
来自UILayoutGuide 文档:
在视图层次结构中添加虚拟视图会产生很多成本。首先,存在创建和维护视图本身的成本。其次,虚拟视图是视图层次结构的完整成员,这意味着它增加了层次结构执行的每个任务的开销。最糟糕的是,不可见的虚拟视图会截获发往其他视图的消息,从而导致难以发现的问题。
您可以使用UILayoutGuide
s 来执行此操作;而不是将按钮添加到不必要的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];
【讨论】:
你假设他/她正在使用 swift,但他/她没有说任何关于它的内容 您可以使用 Objective-C 以稍微不同的语法来做完全相同的事情。 @ddb 你应该查看问题编辑历史。问题标题在被 Eric 编辑之前说 Swift 你说得对,@Shubhank,我没有注意到问题标签“swift”:)【参考方案4】:-
将这两个视图嵌入到一个视图中(在设计器中,只需选择两个视图,然后从 xcode 菜单中选择编辑器 -> 嵌入 -> 视图)
对容器视图应用约束以使视图在容器中水平居中
最终,您可以在容器视图自身和 ViewController 的视图之间应用顶部约束
【讨论】:
【参考方案5】:你可以这样做:
为两个按钮定义水平间距,例如 10 将左侧按钮的中心水平设置为顶视图,并在此约束上将乘数设置为 1/2(不要忘记缺少的约束,例如按钮和顶视图之间的顶部空间)
编辑我不建议将无用的视图添加为容器。这是不好的做法。乘数是要走的路。
【讨论】:
【参考方案6】:使用的信息较少,但您可以通过编程方式添加约束以添加左侧空间 - x 约束以到达页面中间。 您还可以将两个按钮放在一个小视图中,这样更容易在中间对齐
【讨论】:
使用视图是替代选项,我正在寻找设置约束的解决方案。您能否向我展示以编程方式为这些按钮设置约束的示例。您还需要什么信息?以上是关于设置两个 UIButton 约束? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
根据手机调整UIScrollView中UIView和UIButton之间的约束高度
Swift 3 - 自定义 UIButton 半径删除约束?