【问题标题】:Vertical layout issue with 2 UILabels inside a StackViewStackView 内的 2 个 UILabel 的垂直布局问题
【发布时间】:2020-03-11 06:15:39
【问题描述】:

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

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 的边缘。

stackView 上的distribution 设置为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】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      相关资源
      最近更新 更多