setContentCompressionResistancePriority和setContentHuggingPriority的使用

需求

两个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。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容