UIStackView分布等距

14

我有一个包含四个(4) UIViewUIStackView。如果我移除其中的一个(1) UIView,其他三个(3) 将填满整个UIStackView

我的问题是:

如何为 UIView 添加最大高度,以便即使分布均匀,它也不会填满整个UIStackView?我看到了一些关于添加约束的内容,但我无法让它起作用。顺便说一下,我正在使用Swift。

谢谢。

4个回答

18

作为确认,这是当前的行为:

enter image description here

而这是所需的行为:

enter image description here

您可以按照以下简单的技巧来实现:

P.S: 我假设您已为堆栈视图添加了必要的适当约束。

如果您的堆栈视图没有“高度”约束,请添加一个:

enter image description here

现在,将其作为IBOutlet添加到分配的ViewController中;在我的示例中,我将其称为stackHeight

@IBOutlet weak var stackHeight: NSLayoutConstraint!

如果您想隐藏视图(在我的示例中,我正在根据分配给自身的 IBAction 在点击它时隐藏橙色按钮),则需要获取要隐藏的视图的高度并从 stackHeight.constant 中减去:

如果您想隐藏视图(在我的示例中,我根据分配给自身的 IBAction 隐藏了橙色按钮,并在用户点击该按钮时),您需要获取要隐藏的视图的高度并从 stackHeight.constant 减去该高度:

    @IBAction func orangeTapped(_ sender: AnyObject) {
        orange.isHidden = true
        
        // here we go:
        stackHeight.constant = stackHeight.constant - orange.frame.size.height
    }

你的视觉示例正是我所面临的问题,哇!阿哈迪这个主意太棒了。我会尝试这个技巧并保持联系 :) 谢谢。 - Bnj
1
很高兴能帮忙,如果需要的话,您可以留下评论。 - Ahmad F
嗨,Ahmad!我现在已经解决了问题。但是我又遇到了另一个问题!这是情景:我有一个“ColumnContainerStackView”,其中包含“Column1StackView”和“Column2StackView”,它们都有4个UIView。一旦我从Column1中删除了1个UIView,Column2就会跟随Column1的高度。我该如何避免Column2不跟随Column1的高度?谢谢。 - Bnj
你能否再解释一下吗?我所理解的与问题相同... - Ahmad F
你好Ahmad。我现在能够迭代问题了。非常感谢:) - Bnj

5

移除堆栈视图底部边缘的约束,这样它就会调整大小以适应可见控件。


1
如果您不想删除底部约束,请将分布设置为.fill,并在堆栈末尾添加一个透明的UIView。这个视图会被拉伸,而其他视图则会保持堆叠在顶部。

0

尝试在堆栈视图的属性检查器中更改“Distribution”属性为等间距。它应该可以工作。

或者您可以将其更改为相等地填充以使剩余的三个视图在堆栈视图中平均分布。


@AhmadF 为什么不呢?我刚试了一下,对我来说很好用! - Ajil O.
1
它保留它们之间的空格,它们不会粘在一起,即间距!= 0,它将已移除视图的宽度/高度分配为其他三个视图之间的空格。 - Ahmad F

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接