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

Dav*_*tin 4 ios stackview nslayoutconstraint swift

然而,我有一个UIStackView,第一个视图subViews是 aUILabel并且它没有相应地调整它的大小。

我的代码如下;

private let stackView: UIStackView = {
    let view = UIStackView()
    view.translatesAutoresizingMaskIntoConstraints = false
    view.axis = .horizontal
    view.distribution = .fillProportionally
    view.alignment = .trailing
    view.spacing = 8
    return view
}()
Run Code Online (Sandbox Code Playgroud)

当然,我添加了以下内容subViewsinit

    stackView.addArrangedSubview(currentBidLabel)
    stackView.addArrangedSubview(seperator)
    stackView.addArrangedSubview(adCreatedAtLabel)
    stackView.addArrangedSubview(moreButton)
Run Code Online (Sandbox Code Playgroud)

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

插图

我正在寻找的结果如下;

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

Moj*_*ini 9

您应该ContentHuggingPriority为每个标签设置所需的值。以下设置将满足您的需求

redLabel.setContentHuggingPriority(. required, for: .horizontal)
greenLabel.setContentHuggingPriority(.required, for: .horizontal)
blueLabel.setContentHuggingPriority(.defaultLow, for: .horizontal)
cyanLabel.setContentHuggingPriority(.required, for: .horizontal)
Run Code Online (Sandbox Code Playgroud)
  • defaultLow意思是把剩下的填满。
  • required意思是适合第一。

其他值应该在这两者之间。