SnapKit-进阶篇

  这一篇我们分析下使用 SnapKit 在布局时候的两个重要的概念 HuggingPriority-抗拉伸 和 CompressionResistancePriority-抗压缩。

HuggingPriority-抗拉伸

  在布局的过程中,我们往往会遇到两个 View 放在同一行的情况,如果两个 View 不能够填满整个空间,就会被拉伸。

  这时我们设置其中不需要拉伸的 View 的 HuggingPriority 为 high,就可以让其不被拉伸。举个栗子:
HuggingPriority

  这种情况,我们设置左边抗拉伸强度为Height,这样在左右两边的Label有空隙的时候,会拉伸右边的Label。
leftLabel.snp.makeConstraints { (make) in
    make.top.equalToSuperview().offset(200)
    make.left.equalToSuperview().offset(20)
            make.right.greaterThanOrEqualTo(rightLabel.snp.left).offset(-10).priority(.medium)
}
leftLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal)
        
rightLabel.snp.makeConstraints { (make) in
    make.top.equalTo(leftLabel)
            make.left.greaterThanOrEqualTo(leftLabel.snp.right).offset(10).priority(.medium)
    make.right.equalToSuperview().offset(-20)
}
CompressionResistancePriority-抗压缩

  与 HuggingPriority-抗拉伸 相对应的就是 CompressionResistancePriority-压缩。
![-抗压缩
  与 HuggingPriority-抗拉伸 相对应的就是 CompressionResistancePriority-压缩。
举个栗子:



  这中情况下,我们设置 LeftLabel 抗压缩性 CompressionResistancePriority 为 high,设置 RightLabel 的 CompressionResistancePriority 为 low,那么就会自动拉伸 RightLabel,而 LeftLabel 就会维持原状。

leftLabel.snp.makeConstraints { (make) in
    make.top.equalToSuperview().offset(200)
    make.left.equalToSuperview().offset(20)
            make.right.greaterThanOrEqualTo(rightLabel.snp.left).offset(-10).priority(.high)
}
leftLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
        
rightLabel.snp.makeConstraints { (make) in
    make.top.equalTo(leftLabel)
            make.left.greaterThanOrEqualTo(leftLabel.snp.right).offset(10).priority(.medium)
    make.right.equalToSuperview().offset(-20)
}
rightLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)

参考:
HuggingPriority和CompressionResistance 一个例子教你理解

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

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,003评论 3 119
  • 如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。 实现...
    franky_hu阅读 516评论 0 1
  • 你最大的问题就是你还在看,还在观望,而别人已经迈出第一步,正在考虑如何更好的迈出第二步。 举个栗子,我微信里加了一...
    JT有趣儿阅读 1,264评论 0 3
  • E先生人品好,才貌好。总之,不管男的女的都恨他,男的恨他比自己完美,女的恨他不爱自己。 E先生从小到大可以说是顺风...
    南城酒阅读 728评论 0 1