设置两个 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 文档:

在视图层次结构中添加虚拟视图会产生很多成本。首先,存在创建和维护视图本身的成本。其次,虚拟视图是视图层次结构的完整成员,这意味着它增加了层次结构执行的每个任务的开销。最糟糕的是,不可见的虚拟视图会截获发往其他视图的消息,从而导致难以发现的问题。

您可以使用UILayoutGuides 来执行此操作;而不是将按钮添加到不必要的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 半径删除约束?

Swift - UIButton 以编程方式设置约束

如何使用 UIButton 设置 UIimageView 的 AutoLayout 约束?

将按钮框架设置为适合视图

如何在 UIButton 上设置宽度约束