我尝试在两个堆栈视图中对齐图标,一些文本和结果。
第一个堆栈视图是垂直的,包含X个水平堆栈视图。每个水平堆栈视图包含UIImageView
和两个UILabel
s。
虽然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
添加顶部,前导,尾随,底部约束。不要添加高度约束。它将根据子视图计算。
接下来将水平堆栈视图添加为已安排的子视图
stackView.alignment = .center
stackView.distribution = .fillProportionally
stavkView.spacing = 2
现在在每个水平堆栈视图中添加一个图像视图和两个标签。
不要为这些图像视图和标签添加前导,尾随,顶部,底部约束。
为每个图像视图添加宽度和高度约束
为lbl1和lbl2分配相等的宽度
lbl1.widthAnchor.constraint(equalTo: lbl2.widthAnchor).isActive = true
将lbl2
的textAlignemnt
改为.right
lbl2.textAlignment = .right
现在你会得到这个
要么
而不是添加与lbl1和lbl2相等的
为lbl2设置内容拥抱优先级
lbl2.setContentHuggingPriority(.defaultHigh, for: .horizontal)
现在lbl2的宽度将缩小以适合其文本。 lbl1将占用剩余宽度