你如何正确对齐水平UIStackView?

Pro*_*air 22 interface-builder swift uistackview

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

Jos*_*ald 20

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

在我看来,出于布局原因而改变这一点可能是对文本方向API的误用,以及一些黑客攻击,但考虑到这一点:

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

IB中的语义选择器

或者您可以使用视图在代码中执行此操作 semanticContentAttribute

stackView.semanticContentAttribute = .forceRightToLeft
Run Code Online (Sandbox Code Playgroud)


Mic*_*ong 8

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

然而,诀窍是将领先的堆栈视图约束关系从等于更改为大于或等于

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

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

所以:

stackView.leadingAnchor.constraint(greaterThanOrEqualTo: parent.leadingAnchor).isActive = true

stackView.trailingAnchor.constraint(equalTo: parent.trailingAnchor).isActive = true

stackView.distribution = .equalSpacing
Run Code Online (Sandbox Code Playgroud)

  • 做得很好,提供了一个实际使用的东西稍微超出默认黑客的解决方案......这就是这些选项的用途 - 像这样的东西。 (2认同)

Rac*_*vey 5

对我来说最有效的方法是将水平Stackview放在垂直StackView中,然后将垂直StackView的对齐方式设置为领先

  • 我认为你的意思是说“尾随”,而不是领先。无论如何,这有效。 (3认同)