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

时间:2019-11-15 05:59:54

标签: 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
}()

titleLabel可以增大并强制缩小descriptionLabel。 单元格的高度固定为120或78。当单元格的高度为78时,descriptionLabel的高度为0

两者都添加到UIStackview

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

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

distribution上的stackView设置为fill,以允许descriptionLabel缩小。此设置导致约束破坏。

问题

titleLabel-UILabel的高度不明确

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

有没有一种方法可以在不破坏约束的情况下实现这一目标?

我尝试如下设置两个标签的内容抗性优先级:

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

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

我仍然没有运气。

1 个答案:

答案 0 :(得分:0)

通过在descriptionLabel上设置内容优先级,我可以解决布局的歧义。

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