UIStackView Weight like 线性布局

UIStackView Weight like Linear layout

如何用StackView设计如下布局

我知道它可以在不使用 stackview 的情况下轻松创建,但是可以使用 stackview 吗,因为我有很多 ui 已经使用 stackview 设计了我如何在视图之间添加分隔符,如上图

为此我设置了以下限制条件

**但是 运行 时间它显示为 **

您可以使用 UIStackViews 来做到这一点,方法如下:

首先,创建一个 UIView 的子 class 用作两个按钮之间 UIView 的 class。

class CustomWidthView: UIView {

    override var intrinsicContentSize: CGSize {
        return CGSize(width: 1, height: self.frame.height)
    }
}

你只需要覆盖 intrinsicContentSize.

现在,添加您的 2 个按钮和它们之间的空 UIView,并将 UIView 的 class 设置为 CustomWidthView。将你的 2 个按钮和它们之间的视图嵌入到堆栈视图中,并使用适当的约束正确设置堆栈视图的位置。

Select 堆栈视图并从 Attributes inspector,找到名为 Distribution 的 属性 并从旁边的下拉菜单,select 按比例填充

为了反映您在 UI 生成器中的更改,select 自定义宽度视图并转到 尺寸检查器 ,向下到列表,您会发现一个名为 Intrinsic Size 的 属性,将其值更改为 Placeholder,然后从 width下拉菜单,select 1.

可能有更好的方法来实现这一点,但这是我目前找到的方法,我想找到更好的方法。

您可以使用一些简单的 Autolayout constraints 来获得这种带有 UIStackView 的界面。

下图描述了您可以申请的hierarchy and constraints

Accept and Reject 按钮也有 Equal Width 约束。

输出截图:

由于UIStackView使用自动布局来安排其子视图,您可以通过创建约束来修改其行为。

我假设您在堆栈中有三个视图:接受按钮、分隔线和取消按钮。

创建两个约束:

  1. 接受按钮和取消按钮之间的等宽约束。

  2. 分隔符的固定宽度约束(大概将其宽度设置为 1)。

另见