Swift 视图权重类似线性布局

Swift 视图权重类似线性布局,swift,autolayout,uistackview,Swift,Autolayout,Uistackview,如何使用StackView设计以下布局 我知道不用stackview就可以很容易地创建它,但是使用stackview有可能吗?因为我有很多已经使用stackview设计的ui。我如何在像上图这样的视图之间添加分隔符 为此,我设置了以下约束 **但是运行时它显示为** 您可以使用UIStackViews来实现这一点,以下是方法: 首先,创建UIView的子类,用作两个按钮之间的UIView类 class CustomWidthView: UIView { override var i

如何使用StackView设计以下布局

我知道不用stackview就可以很容易地创建它,但是使用stackview有可能吗?因为我有很多已经使用stackview设计的ui。我如何在像上图这样的视图之间添加分隔符

为此,我设置了以下约束

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

您可以使用
UIStackView
s来实现这一点,以下是方法:

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

class CustomWidthView: UIView {

    override var intrinsicContentSize: CGSize {
        return CGSize(width: 1, height: self.frame.height)
    }
}
您只需要重写
intrinsicContentSize

现在,在两个按钮之间添加一个空的
UIView
,并将
UIView
的类设置为
CustomWidthView
。在堆栈视图中嵌入两个按钮及其之间的视图,并使用适当的约束正确设置堆栈视图的位置

选择堆栈视图,然后从属性检查器中查找名为Distribution的属性,并从其旁边的下拉菜单中选择“按比例填充”

要在UI Builder中反映您所做的更改,请选择“自定义宽度”视图,然后转到“大小检查器”,转到列表底部,您将找到一个名为“内部大小”的属性,将其值更改为“占位符”,然后从“宽度”下拉菜单中选择1


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

您可以使用一些简单的
自动布局
约束
来获得具有
UIStackView
的此类界面

下图描述了您可以应用的
层次结构和约束

另外,
接受和拒绝
按钮具有
等宽
约束

输出屏幕截图:


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

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

创建两个约束:

  • “接受”按钮和“取消”按钮之间的等宽约束

  • 分隔符上的固定宽度约束(假定将其宽度设置为1)


  • 另请参见。

    您不需要创建任何子类。您只需使用子视图上的约束即可。明确地说“您还可以通过向排列视图添加其他约束来微调排列视图的外观。”我同意这是过分的,我尝试的第一个解决方案与您的答案中的解决方案类似,但由于某些原因,它在UI Builder中按预期绘制,但是当您运行时,然后中间视图没有显示。它在情节提要中看起来很完美,但是当我运行project divider时,它没有显示。您是否将中间视图的背景设置为黑色,将imageView的背景设置为白色?我已添加了我在同一视图中获得的输出的屏幕截图。在这里您可以找到情节提要链接:当然..愉快的编码..:)怎么办你的意思是“空白黑色区域”见上面的更新问题