你如何正确对齐水平UIStackView?

时间:2016-10-25 08:45:33

标签: swift interface-builder uistackview

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

4 个答案:

答案 0 :(得分:16)

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

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

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

Semantic selector in IB

或者您可以使用视图UIStackView

在代码中执行此操作
semanticContentAttribute

答案 1 :(得分:3)

我有一个水平导向的$stmt = $conn->prepare("SELECT pwd FROM users WHERE name=?"); $stmt->bindValue(1, $username); $stmt->execute(); $result = $stmt->fetch(); $savedpassword = $result['pwd']; ,其中包含两个UIStackView个;隐藏其中一个视图导致另一个传播全宽。向剩余视图添加宽度约束会导致保持所需的宽度,但会向右移动。

<强> TL; DR

将隐藏的UIView添加到堆栈视图,该视图显示另一个隐藏的间距。

答案 2 :(得分:3)

最适合我的方法是将水平Stackview放在垂直StackView内,然后将垂直StackView的对齐方式设置为领先

答案 3 :(得分:0)

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

但是,技巧是将领先的stackview约束关系从等于更改为大于或等于

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

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

所以:

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

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

stackView.distribution = .equalSpacing