【问题标题】:UIStackView Distribution Fill EquallyUIStackView 分布填充均等
【发布时间】:2017-03-08 09:12:22
【问题描述】:

所以,我有一个 UIStackView,其中包含四 (4) 个 UIViews。如果我删除其中的一 (1) 个 UIViews,其他三 (3) 个将填满 UIStackView 中的整个空间。

我的问题:

如何在UIView 上添加最大高度,这样即使分布被平均填充,它也不会填满UIStackView 的整个空间?我读了一些关于添加约束的东西,但我无法让它工作。顺便说一句,我正在使用 swift。

谢谢。

【问题讨论】:

    标签: ios swift autolayout constraints uistackview


    【解决方案1】:

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

    或者您可以将其更改为平均填充,以便在 Stack 视图中平均填充剩余的 3 个视图。

    【讨论】:

    • @AhmadF 为什么不呢?我刚试过,对我来说效果很好!
    • 它在它们之间保留空格,它们不会粘在一起,即间距!= 0,它将删除的视图的宽度/高度分配为其他三个视图之间的空格。
    【解决方案2】:

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

    这就是你要的:

    为了实现它,你可以遵循这个简单的技巧:

    附注:我假设您为堆栈视图添加了所需的适当约束。

    如果您的堆栈视图没有 "height" 约束,请添加一个:

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

    @IBOutlet weak var stackHeight: NSLayoutConstraint!
    

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

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

    【讨论】:

    • 您的视觉示例正是我面临的问题,哇!艾哈迈德真是个好主意。我会试试这个技巧,并会及时通知你:) 谢谢。
    • 很高兴为您提供帮助,如果需要,您可以发表评论。
    • 嗨,又是艾哈迈德!我现在解决了这个问题。但是我遇到了另一个问题!所以这里是场景。我有一个带有“Column1StackView”和“Column2StackView”的“ColumnContainerStackView”,它们里面都有一个 4 UIView。一旦我在 Column1 中删除了 1 个 UIView,第 2 列将遵循 Column1 的高度。如何避免 Column2 不遵循 Column1 高度?谢谢。
    • 您能解释一下吗?我得到的和问题一样...
    • 你好艾哈迈德。我现在可以重复这个问题。非常感谢你:)
    【解决方案3】:

    移除堆栈视图底部边缘的约束。然后它将调整大小以适合可见控件。

    【讨论】:

      【解决方案4】:

      如果不想移除底部约束,只需将分布设置为.fill,并在堆栈末尾添加一个透明的UIView

      此视图将拉伸,而其他视图将保持堆叠在顶部。

      【讨论】:

        猜你喜欢
        • 2019-08-21
        • 2017-03-24
        • 2016-05-27
        • 2018-12-01
        • 2016-08-02
        • 2018-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多