【问题标题】:How do you right align a horizontal UIStackView?你如何正确对齐水平 UIStackView?
【发布时间】:2017-03-07 05:33:35
【问题描述】:

我还没有在任何地方找到答案,我不确定它是否可能,但我正在尝试右对齐水平UIStackView,这样如果子视图被隐藏,它们就会向右侧移动不是左边。以编程方式(在 Swift 中)或使用 Interface Builder

【问题讨论】:

    标签: swift interface-builder uistackview


    【解决方案1】:

    UIStackViews 根据用户的文本方向对齐,即对于英语和其他罗马脚本语言左对齐,或对于希伯来语等语言右对齐。

    在我看来,出于布局原因更改此设置可能是对文本方向 API 的误用,并且有点不合时宜,但请记住这一点:

    您可以在界面构建器中更改特定视图的方向,使用语义下拉菜单,其中包含“强制从左到右”和“强制从右到左”选项,这将改变它们的方向弹出到它们的显示顺序。所以你必须颠倒堆栈视图中元素的顺序

    或者你可以在代码中使用视图的semanticContentAttribute

    stackView.semanticContentAttribute = .forceRightToLeft
    

    【讨论】:

    • 有没有办法改变特定 UIView 的方向?
    • 我更新了我的答案,以涵盖您昨天如何针对特定视图更改它,这对您有帮助吗?
    【解决方案2】:

    最适合我的方法是将我的水平堆栈视图放在垂直堆栈视图中,并将垂直的对齐设置为前导

    【讨论】:

    • 我认为您的意思是说“尾随”,而不是领先。无论如何,这行得通。
    • 这很好用
    【解决方案3】:

    与其他答案不同,解决方案实际上相当简单。您需要添加一个尾随约束,将堆栈视图固定到其父视图的后缘,然后添加一个前导约束,将其固定到父视图的前缘。

    然而,诀窍是将领先的 stackview 约束关系从 equal 更改为 大于或等于

    这将允许堆栈视图的前沿捕捉到堆栈视图内容的固有宽度,有效地将所有内容固定到后沿。

    垂直堆栈视图类似。用等于固定顶部,用小于或等于固定底部。

    所以:

    stackView.leadingAnchor.constraint(greaterThanOrEqualTo: parent.leadingAnchor).isActive = true
    
    stackView.trailingAnchor.constraint(equalTo: parent.trailingAnchor).isActive = true
    
    stackView.distribution = .equalSpacing
    

    【讨论】:

    • 很好地提供了一个解决方案,它实际上使用了一些超出默认黑客的东西......这就是这些选项的用途 - 像这样的东西。
    • 在处理这个问题数小时后救了我!
    • 您可能必须在内部 stackView 内容上添加内容拥抱优先级,以防止它们拉伸以填充可用空间并将它们包含的任何内容居中。
    【解决方案4】:

    我有一个水平方向的UIStackView,其中包含两个UIViews;隐藏其中一个视图会导致另一个视图全角传播。向剩余视图添加宽度约束导致保持所需宽度,但它向右移动。

    TL;DR

    在堆栈视图中添加一个隐藏的UIView,以显示另一个隐藏的间距。

    【讨论】:

    • 它解决了我的问题,使用这种方法,您的堆栈视图必须配置为:stackView.distribution = UIStackViewDistributionFill; & stackView.alignment = UIStackViewAlignmentCenter;
    猜你喜欢
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 2016-04-07
    相关资源
    最近更新 更多