我有如下定义的标题标签:
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)
我仍然没有运气。
答案 0 :(得分:0)
通过在descriptionLabel
上设置内容优先级,我可以解决布局的歧义。
private lazy var descriptionLabel: UILabel = {
let label = UILabel()
label.numberOfLines = 0
label.lineBreakMode = .byTruncatingTail
label.setContentHuggingPriority(.high, for: .vertical)
return label
}()