当对button给予等宽限制时,自动布局设置不正确

我看到很多解决scheme和应用自动布局约束,但我仍然没有得到所需的解决scheme。

当前结果:

自动布局设置后的结果

给所有button的约束:

给按钮的约束

查看层次结构:

在这里输入图像说明

假设你想让3个button相互平等,并使用Interface Builder(无代码,即:不是以编程方式)填充屏幕的宽度,这是一个解决scheme:

你不需要在视图中添加它们。 只需按照以下步骤操作

让我们从这个开始:

在这里输入图像说明

请注意,button没有任何约束,只是将它们添加到视图的底部(或者您想要显示它们的位置,对于此解决scheme,我将在屏幕底部显示它们)。 确保他们三个有相同的大小。

将约束添加到橙色button:

添加以下约束: 领导,底部空间和相等的高度。

在这里输入图像说明

将约束添加到蓝色button:

添加以下约束: 拖尾,底部空间和相等的高度。

在这里输入图像说明

青色button添加约束:

  • ctrl +从青色button拖动到橙色button,并添加以下约束: 水平间距和垂直居中。

在这里输入图像说明

  • ctrl +从青色button拖动到蓝色button,并添加以下约束: 水平间距。

在这里输入图像说明

  • 底部空间和相等的高度。

在这里输入图像说明

到目前为止,我们差不多完成了!

现在,select3个button并添加以下约束: 等宽。

在这里输入图像说明

你的button应该是这样的:

在这里输入图像说明

现在,您只需select两个水平间距约束中的每一个,并将其常量设置为0(从大小检查器):

在这里输入图像说明

在这里输入图像说明

在那里你去:

在这里输入图像说明

我希望这有助于,干杯。

对不起,在代码解决scheme.. .Swift 3.0:

let button1 = UIButton() let button2 = UIButton() let button3 = UIButton() let buttons = [button1, button2, button3] button1.backgroundColor = .red button2.backgroundColor = .blue button3.backgroundColor = .green buttons.forEach { $0.translatesAutoresizingMaskIntoConstraints = false view.addSubview($0) } buttons.forEach { let cnt1 = NSLayoutConstraint(item: $0, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 1, constant: 0) let cnt2 = NSLayoutConstraint(item: $0, attribute: .height, relatedBy: .equal, toItem: view, attribute: .height, multiplier: 0.2, constant: 0) view.addConstraints([cnt1, cnt2]) } let cnt1 = NSLayoutConstraint(item: button1, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: 0) let cnt2 = NSLayoutConstraint(item: view, attribute: .trailing, relatedBy: .equal, toItem: button3, attribute: .trailing, multiplier: 1, constant: 0) let cnt3 = NSLayoutConstraint(item: button2, attribute: .width, relatedBy: .equal, toItem: button1, attribute: .width, multiplier: 1, constant: 0) let cnt4 = NSLayoutConstraint(item: button3, attribute: .width, relatedBy: .equal, toItem: button2, attribute: .width, multiplier: 1, constant: 0) let cnt5 = NSLayoutConstraint(item: button2, attribute: .leading, relatedBy: .equal, toItem: button1, attribute: .trailing, multiplier: 1, constant: 0) let cnt6 = NSLayoutConstraint(item: button3, attribute: .leading, relatedBy: .equal, toItem: button2, attribute: .trailing, multiplier: 1, constant: 0) view.addConstraints([cnt1, cnt2, cnt3, cnt4, cnt5, cnt6]) 

你是否试图水平放置三个具有相同高度和宽度的button? 我想你可以在不使用UIViews的情况下实现这个function。 我设置如下约束。

在这里输入图像说明

这是一个模拟器截图。

模拟器截图