需求
两个label并排显示,label宽度以文字内容自适应,当两个label的宽度加到一起小于屏幕宽度时,让左label拉伸,右label宽度以文字内容为准。当两个label宽度之和大于屏幕宽度时,让左label压缩,右label文字完全显示。
代码实现
//以SnapKit为例
let leftLabel = UILabel()
leftLabel.text = "hellohellohehellhellohellohehell"
leftLabel.backgroundColor = .red
leftLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
leftLabel.setContentHuggingPriority(.defaultLow, for: .horizontal)
let rightLabel = UILabel()
rightLabel.text = "worldworldworldorldworldworld"
rightLabel.backgroundColor = .blue
view.addSubview(leftLabel)
view.addSubview(rightLabel)
leftLabel.snp.makeConstraints { (maker) in
maker.top.equalToSuperview().offset(200)
maker.left.equalToSuperview()
maker.right.equalTo(rightLabel.snp.left)
}
rightLabel.snp.makeConstraints { (maker) in
maker.top.equalTo(leftLabel)
maker.right.equalToSuperview()
}
代码解析
UIView有两个方法如下
//设置控件的抗拉伸优先级
//控件的抗拉伸优先级数值默认是250,数值越大,抗拉伸能力越强,越不易被拉伸
setContentHuggingPriority(_ priority: UILayoutPriority, for axis: NSLayoutConstraint.Axis)
//设置控件的抗压缩优先级
//控件的抗压缩优先级数值默认是750,数值越大,抗压缩能力越强,越不易被压缩
setContentCompressionResistancePriority(_ priority: UILayoutPriority, for axis: NSLayoutConstraint.Axis)
因此,为了实现需求,我们可以设置左label的抗拉伸优先级<默认值,抗压缩优先级<默认值,这样,当两个label文字都不足时,就会拉伸左边的label,当两个label文字都充足时,就会压缩左边的label。