如何在 iOS 自动布局中为按钮添加等距和等宽

How to add Equal Spacing and equal width for button in iOS Auto layout

我是 Xcode 中的自动布局约束的新手。我有一个底部视图,例如 UITabBar 和 6 个 UIButtons。在没有约束的情况下,我将这些按钮与每个按钮的 5 space 填充对齐,每个按钮的宽度为 50。 现在,我试图通过使用自动布局来支持所有屏幕尺寸来实现它。

In Storyboard constrains I set equal width for 6 buttons and I made 60 space between each buttons. I set first button 0 to leading space and I set the last button 0 to tail constraints.

我想要 buttons with equal width and flexible spaces 在所有设备尺寸的视图之间。

谁能帮帮我?寻求帮助。提前致谢。

检查这张图片并像下面这样设置你的约束...

结果:- 不同尺寸的预览


使用 Stackview(对于 iOS 9.0 及更高版本)

NOTE: If you have to make app for iOS 9 and later then UIStackView is another option for you

Select 所有按钮和 Xcode 的 Pin 菜单

  1. 通过选择到所选视图右侧最近邻居的红线,创建从左上视图到右上视图的水平约束
  2. 通过选择到所选视图左侧最近邻居的红线,创建从右上视图到左上视图的水平约束
  3. 通过选择红线到所选视图的顶侧最近邻居,从顶视图创建垂直约束
  4. Select 复选框靠近“高度”、“等宽”,然后单击“添加 22 个约束

iOS 9 有一个名为 UIStackView 的新 UIKit class。这对于按照您想要的方式水平或垂直堆叠视图非常有帮助。您应该查看本教程:Raywenderlich: UIStackView Tutorial

使用 iOS 9 和 Xcode 7,您现在可以使用 UIStackView 和仅 3 或 4 个自动布局约束获得预期结果。

下面一步步使用 Storyboard。

  1. 创建 6 个 UIButton 和 5 个 UIView。水平对齐它们。为您的观点增添色彩。

  1. Select 您所有的视图和按钮,然后单击 Stack 按钮。您将所有按钮和彩色视图对齐 UIStackView

  1. Select 您的堆栈视图,转到 Utilities 面板和 select Attributes Inspector 项目。在那里,单击 Distribution 按钮和 select "Fill Equally"。

  1. 目前,堆栈视图的高度取决于按钮的固有内容大小。如果你觉得没问题,你可以转到第 5 步。但是,如果需要,你可以给你的堆栈视图一个高度限制。 Select 您的堆栈视图,单击 Pin 按钮,选中 Height 按钮,添加所需的值并单击 Add 1 Constraint 按钮。

作为替代方案,如果您希望堆栈视图的每个元素的高度与其宽度相匹配,select堆栈视图的第一个按钮,单击 Pin 按钮,select Aspect Ratio 然后点击 Add 1 Constraint 按钮。

您可以在 Document outline(左面板)中检查纵横比约束是否正确,如果需要,您可以在 Attribute inspector(右面板)中使用不同的约束来更改它).

  1. 现在,是时候为您的堆栈视图提供一些外部约束了。 Select 你的堆栈视图。单击 pin 按钮,确保 Constrain to margin 按钮不是 select 并将前导、尾随和底部约束设置为零。确保底部约束与视图控制器的视图相关。然后,将 Update Frames 按钮更改为 "All Frames in Container"。您现在可以单击 Add 3 Constraints 按钮。

您的堆栈视图现已设置。

进一步说明:

如果您不需要彩色视图宽度与按钮宽度相匹配,您可以仅使用 UIButtons 构建堆栈视图,并在 Attribute inspector 中简单地向堆栈视图添加间距。但是,您必须找到一种方法在堆栈视图后面添加背景颜色。 Apple 在 UIKit Framework Reference:

中对此进行了说明

The UIStackView is a nonrendering subclass of UIView. It does not provide any user interface of its own. Instead, it just manages the position and size of its arranged views. As a result, some properties (like backgroundColor) have no affect on the stack view.


我用 4 个不同的堆栈视图构建了一个 Xcode 项目:

  • 具有彩色视图并依赖于嵌入的 UIButton 其高度的内在内容大小,
  • 有彩色视图和 UIButton "equal width and height" 约束,
  • 一个有彩色视图并有自己的高度限制,
  • 一个没有彩色视图但有间距并嵌入彩色视图中。

你可以在这个GitHub repo上找到这个项目。

不再需要间隔视图,除非您需要 space 边框。

您可以创建一个具有相等间距的 StackView,它将动态调整您的堆栈视图之间的 space 以用尽所有可用的 space,而不改变您的子视图的大小。

界面生成器在这里可能有点误导。您为间距输入的值是所需的最小间距,而不是实际间距。

StackView 将处理您的间距,使您的按钮大小相等,您可以使用常规约束。