具有动态标签宽度的堆栈视图分布
Stack View Distribution with Dynamic Label Width
我有一个 UIStackView
但是,subViews
的第一个视图是 UILabel
并且它没有相应地调整它的大小。
我的代码如下;
private let stackView: UIStackView = {
let view = UIStackView()
view.translatesAutoresizingMaskIntoConstraints = false
view.axis = .horizontal
view.distribution = .fillProportionally
view.alignment = .trailing
view.spacing = 8
return view
}()
当然,我在 init
中添加我的 subViews
,如下所示;
stackView.addArrangedSubview(currentBidLabel)
stackView.addArrangedSubview(seperator)
stackView.addArrangedSubview(adCreatedAtLabel)
stackView.addArrangedSubview(moreButton)
我目前的结果如下图所示;
我要查找的结果如下;
- 红色 = 动态标签宽度(与蓝色相同)
- 绿色 = 固定宽度
- 蓝色 = 填充剩余 Space
- 青色 = 固定宽度
您应该为每个标签设置所需的 ContentHuggingPriority
。以下设置将符合您的需求
redLabel.setContentHuggingPriority(. required, for: .horizontal)
greenLabel.setContentHuggingPriority(.required, for: .horizontal)
blueLabel.setContentHuggingPriority(.defaultLow, for: .horizontal)
cyanLabel.setContentHuggingPriority(.required, for: .horizontal)
defaultLow
表示把剩下的补上
required
表示先适合。
其他值应该介于这两者之间。
我有一个 UIStackView
但是,subViews
的第一个视图是 UILabel
并且它没有相应地调整它的大小。
我的代码如下;
private let stackView: UIStackView = {
let view = UIStackView()
view.translatesAutoresizingMaskIntoConstraints = false
view.axis = .horizontal
view.distribution = .fillProportionally
view.alignment = .trailing
view.spacing = 8
return view
}()
当然,我在 init
中添加我的 subViews
,如下所示;
stackView.addArrangedSubview(currentBidLabel)
stackView.addArrangedSubview(seperator)
stackView.addArrangedSubview(adCreatedAtLabel)
stackView.addArrangedSubview(moreButton)
我目前的结果如下图所示;
我要查找的结果如下;
- 红色 = 动态标签宽度(与蓝色相同)
- 绿色 = 固定宽度
- 蓝色 = 填充剩余 Space
- 青色 = 固定宽度
您应该为每个标签设置所需的 ContentHuggingPriority
。以下设置将符合您的需求
redLabel.setContentHuggingPriority(. required, for: .horizontal)
greenLabel.setContentHuggingPriority(.required, for: .horizontal)
blueLabel.setContentHuggingPriority(.defaultLow, for: .horizontal)
cyanLabel.setContentHuggingPriority(.required, for: .horizontal)
defaultLow
表示把剩下的补上required
表示先适合。
其他值应该介于这两者之间。