StackView 内有 2 个 UILabels 的垂直布局问题

Des*_*ner 7 ios autolayout uicollectionviewcell uistackview

我有一个标题标签,定义如下:

private lazy var titleLabel: UILabel = {
 let label = UILabel()
 label.numberOfLines = 2
 label.setContentCompressionResistancePriority(.init(rawValue: 999), for: .vertical)
 return label
}()

private lazy var descriptionLabel: UILabel = {
  let label = UILabel()
  label.numberOfLines = 0
  label.lineBreakMode = .byTruncatingTail
  return label
}()
Run Code Online (Sandbox Code Playgroud)

titleLabel可以增长并强制收缩descriptionLabel。单元格高度固定为120或78。当单元格高度为78时,高度descriptionLabel0

两者都添加到UIStackview

private lazy var labelStackView: UIStackView = {
  let stackView = UIStackView()
  stackView.addArrangedSubview(titleLabel)
  stackView.addArrangedSubview(descriptionLabel)
  stackView.axis = .vertical
  stackView.distribution = .fill
  return stackView
}()
Run Code Online (Sandbox Code Playgroud)

stackView 添加containerView到顶部、左侧、右侧和底部的填充内部。固定containerView在 的边缘contentView

distributionstackView被设置fill为允许descriptionLabel收缩。这种设置会导致约束被打破。

问题

titleLabel- UILabel 的高度不明确

descriptionLabel- UILabel 的高度和垂直位置不明确

有没有办法在不打破约束的情况下实现这一目标?

我尝试为两个标签设置内容阻力优先级,如下所示:

titleLabel->label.setContentCompressionResistancePriority(.init(rawValue: 999), for: .vertical)

descriptionLabel->label.setContentCompressionResistancePriority(.init(rawValue: 998), for: .vertical)

我还是没有运气。

Des*_*ner 10

通过在 上设置内容拥抱优先级descriptionLabel,我能够修复布局歧义。

private lazy var descriptionLabel: UILabel = {
 let label = UILabel()
 label.numberOfLines = 0
 label.lineBreakMode = .byTruncatingTail
 label.setContentHuggingPriority(.high, for: .vertical)
 return label
}()
Run Code Online (Sandbox Code Playgroud)