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

How do I define NSLayoutConstraint for a right alignment within a stack view?

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

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

虽然 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 副本...我不明白为什么它不能在我的小部件中以这种方式工作. :/

添加垂直 Stackview

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

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

接下来添加 n 个水平堆栈视图作为排列的子视图

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

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

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

为每个图像视图添加宽度和高度限制

为 lbl1 和 lbl2 分配相同的宽度

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

lbl2textAlignemnt更改为.right

lbl2.textAlignment = .right

现在你会得到这个

而不是将等于添加到 lbl1 和 lbl2

为 lbl2 设置内容拥抱优先级

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

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