如何在堆栈视图中为右对齐定义NSLayoutConstraint?

问题描述 投票:0回答:1

我尝试在两个堆栈视图中对齐图标,一些文本和结果。

第一个堆栈视图是垂直的,包含X个水平堆栈视图。每个水平堆栈视图包含UIImageView和两个UILabels。

虽然UIImageView和第一个UILabel应该在左边对齐,但最后一个UILabel应该在堆栈视图的右侧对齐。

整个UI是用代码生成的,在本例中是C#,但我认为将Swift代码转换为C#并不困难。在阅读了一下关于iOS UI之后,我想我可以用NSLayoutConstraint解决这个问题,但我不知道如何使用它 - 我目前的尝试总是以异常结束。

这就是我目前设置约束的方式:

dataStack.Constraints.Append(NSLayoutConstraint.Create(percentageLabel, NSLayoutAttribute.Trailing, NSLayoutRelation.Equal, dataStack, NSLayoutAttribute.Leading, 1, 0));

编辑:这是它目前的样子:https://puu.sh/Ddlrx/ab36d7c864.png但百分比应该是右对齐的,所以每一行都在同一个地方结束。

这是我当前生成UI的代码:https://pastebin.com/pvMTGx0U

当前代码中的约束是XCode Designer中工作实现的1:1副本...我不明白为什么它在我的小部件中不会以这种方式工作。 :/

c# swift xamarin.ios nslayoutconstraint
1个回答
0
投票

添加垂直Stackview

stackView.alignment = .fill
stackView.distribution = .fillEqually
stackView.spacing = 2

添加顶部,前导,尾随,底部约束。不要添加高度约束。它将根据子视图计算。

接下来将水平堆栈视图添加为已安排的子视图

stackView.alignment = .center
stackView.distribution = .fillProportionally
stavkView.spacing = 2

现在在每个水平堆栈视图中添加一个图像视图和两个标签。

不要为这些图像视图和标签添加前导,尾随,顶部,底部约束。

为每个图像视图添加宽度和高度约束

为lbl1和lbl2分配相等的宽度

lbl1.widthAnchor.constraint(equalTo: lbl2.widthAnchor).isActive = true

lbl2textAlignemnt改为.right

lbl2.textAlignment = .right

现在你会得到这个

enter image description here

要么

而不是添加与lbl1和lbl2相等的

为lbl2设置内容拥抱优先级

lbl2.setContentHuggingPriority(.defaultHigh, for: .horizontal)

现在lbl2的宽度将缩小以适合其文本。 lbl1将占用剩余宽度

© www.soinside.com 2019 - 2024. All rights reserved.