具有动态标签宽度的堆栈视图分布

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)

我目前的结果如下图所示;

我要查找的结果如下;

  1. 红色 = 动态标签宽度(与蓝色相同)
  2. 绿色 = 固定宽度
  3. 蓝色 = 填充剩余 Space
  4. 青色 = 固定宽度

您应该为每个标签设置所需的 ContentHuggingPriority。以下设置将符合您的需求

redLabel.setContentHuggingPriority(. required, for: .horizontal)
greenLabel.setContentHuggingPriority(.required, for: .horizontal)
blueLabel.setContentHuggingPriority(.defaultLow, for: .horizontal)
cyanLabel.setContentHuggingPriority(.required, for: .horizontal)
  • defaultLow表示把剩下的补上
  • required表示先适合。

其他值应该介于这两者之间。