Ios 在水平视图的每一端布置两个UILabel

Ios 在水平视图的每一端布置两个UILabel,ios,uistackview,Ios,Uistackview,我试图在水平UIStackView中布局两个UILabel,但我无法让它工作。如您所见,label2(红色)没有使用label1的剩余宽度 以下是您可以在游乐场中添加的代码: import UIKit import PlaygroundSupport let view = UIView(frame: CGRect(x: 0, y: 0, width: 400, height: 100)) view.backgroundColor = .green let labelStackView =

我试图在水平
UIStackView
中布局两个
UILabel
,但我无法让它工作。如您所见,label2(红色)没有使用label1的剩余宽度

以下是您可以在游乐场中添加的代码:

import UIKit
import PlaygroundSupport

let view = UIView(frame: CGRect(x: 0, y: 0, width: 400, height: 100))
view.backgroundColor = .green

let labelStackView = UIStackView()

labelStackView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
labelStackView.frame = view.bounds

view.addSubview(labelStackView)

labelStackView.distribution = .equalSpacing
labelStackView.alignment = .lastBaseline
labelStackView.spacing = 10

let label1 = UILabel()
label1.backgroundColor = .blue
label1.numberOfLines = 0
label1.text = "Hej Hej Hej"

let label2 = UILabel()
label2.backgroundColor = .red
label2.numberOfLines = 0
label2.text = "Hej Hej Hej Hej Hej Hej Hej Hej Hej Hej Hej Hej Hej"
label2.textAlignment = .right

labelStackView.addArrangedSubview(label1)
labelStackView.addArrangedSubview(label2)

PlaygroundPage.current.liveView = view

正如评论员所指出的,您需要调整标签的内容拥抱或压缩阻力,因为它们将默认为相同的值,从而导致自动布局为它们提供相同的优先级和间距。您还需要将堆栈视图的
分布更改为
按比例填充
。以下几点对我很有用:

let view = UIView(frame: CGRect(x: 0, y: 0, width: 400, height: 100))
view.backgroundColor = .green

let labelStackView = UIStackView()

labelStackView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
labelStackView.frame = view.bounds

view.addSubview(labelStackView)

labelStackView.distribution = .fillProportionally
labelStackView.alignment = .lastBaseline
labelStackView.spacing = 10

let label1 = UILabel()
label1.backgroundColor = .blue
label1.numberOfLines = 0
label1.text = "Hej Hej Hej"
label1.setContentHuggingPriority(UILayoutPriority(1000), for: .horizontal)

let label2 = UILabel()
label2.backgroundColor = .red
label2.numberOfLines = 0
label2.text = "Hej Hej Hej Hej Hej Hej Hej Hej Hej Hej Hej Hej Hej"
label2.textAlignment = .right

labelStackView.addArrangedSubview(label1)
labelStackView.addArrangedSubview(label2)

PlaygroundPage.current.liveView = view

我不确定Stackview,但如果您正在寻找解决方案,没有Stackview也是可能的。具有压缩优先级的NSLayoutConstraint有助于实现此结果。甚至你也可以不用一行代码就用界面视图来设计它。你有没有玩过两个标签视图的抗压缩性?很好的捕捉到了。按比例填充你是怎么想的?试错法?:)您可以看到不同发行版的一篇精彩文章