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

问题描述 投票:0回答:1

我有如下定义的标题标签:

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)

我仍然没有运气。

ios autolayout uicollectionviewcell uistackview
1个回答
0
投票
通过在descriptionLabel上设置内容优先级,我可以解决布局的歧义。

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

© www.soinside.com 2019 - 2024. All rights reserved.