美文网首页iOS开发技巧iosiOS知识收录
IOS开发之Autolayout——“Content Compr

IOS开发之Autolayout——“Content Compr

作者: Z哥 | 来源:发表于2015-06-25 16:14 被阅读10353次

在使用storyboard进行UI布局时,我们经常不经意间会注意到“Content Compression Resistance Priority”和“Content Hugging Priority”这两个属性。

下面给大家简单介绍下这两个小家伙:

首先,我们得先来了解下另一个属性intrinsic size(固有尺寸),一个根据自身内容大小而决定的尺寸。我们都知道,UIButton、UILabel等,在布局时并不需要给它们设置所有constraints,只需要设置 leading space 和 top space 等能决定 X跟Y的constraints 就能够进行布局,这就是它们的intrinsic size在起作用,决定它们的宽高。

那么,“Content Compression Resistance Priority”和“Content Hugging Priority”这两个小家伙跟intrinsic size有什么渊源?

在开发中,我们难免会同时对两个UILabel或者UIButton进行布局,比如水平并行布局,或者垂直并行布局:

我只是简单的为它们添加了决定x和y的constraints,并没有给他们其他设置,按照我们刚才讲的intrinsic size(固有尺寸)两个label应该在除了x和y不同外,宽高保持一致。但是,正如你我所见,在storyboard上,两个label宽高并不一样。水平并行的label宽度不同,垂直并行的label高度不同。可见,intrinsic size(固有尺寸)在同时对多个label进行布局时并不显得那么够!

产生这样的效果的原因是:

1. 在水平并行布局中,两个label的intrinsic size(固有尺寸)加起来比它们的父view(图中蓝色的view)还要宽,因此父view没办法完全展示它们,只能通过压缩它们来实现;

2. 而在垂直并行布局中,两个label的intrinsic size(固有尺寸)加起来并没有它们的父view那么高,父view为了展示他们,只能将它们拉伸。

通过上图,我们清楚的看到,系统并不是同时对两个label进行压缩或者拉伸,而是只针对其中一个。这就是intrinsic size(固有尺寸)跟“Content Compression Resistance Priority”和“Content Hugging Priority”这两个小家伙的关系了。

“Content Compression Resistance Priority”,也叫内容压缩阻力优先级(小名:别挤我),该优先级越高,则越晚轮到被压缩。

“Content Hugging Priority”,也叫内容紧靠优先级(小名:别扯我),该优先级越高,这越晚轮到被拉伸。

因此,在父view大小不够布局子label时,我们可以通过增加某个label的Content Compression Resistance Priority(内容压缩阻力优先级)来防止被压缩。当然降低自身则可以让自己被压缩。

同理,在父view大小太大时,我们可以通过增加label的Content Hugging Priority(内容紧靠优先级)来防止被拉伸。降低则可以达到被拉伸的目的。

欢迎大家拍砖交流

相关文章

网友评论

  • AlwaysAskWhy:很有意思的比喻,一下就看懂了
  • 你家旭哥:别挤我 别扯我 很有意思 这两个一般是一个作用就行了 有没有可能两个都作用?有什么常见的场景么?
  • 付寒宇:“Content Compression Resistance Priority”,也叫内容压缩阻力优先级(小名:别挤我),该优先级越高,则越晚轮到被压缩。

    “Content Hugging Priority”,也叫内容紧靠优先级(小名:别扯我),该优先级越高,这越晚轮到被拉伸。

    这段十分形象 nice
  • 移动端的搬运工Zoe:好厉害好厉害:smile:
  • zcz:赞,mark一下。
  • 无夜之星辰:可以,小伙子。
  • Juice007:这个还真是形象!
  • 大树下的方丈:简单易懂
  • EvanJq:通俗易懂
  • leeyyl:很形象👍
  • StevenJ:额。。。做了五年ios,居然没用过这个。。。
    翀鹰精灵:O(∩_∩)O哈哈哈~,表示用过好多次,大神一定是纯代码的大牛! 我等小白还是经常用XIB和storyBoard的😄
    aaasun:我也没用过:flushed:
  • 0500860f8a39:划重点:别挤我,别扯我。
  • 默默默默摸鱼儿:讲的真好 :+1:
  • MR_詹:看懂了,感谢
  • 街灯下de橱窗:“Content Compression Resistance Priority”,也叫内容压缩阻力优先级(小名:别挤我),该优先级越高,则越晚轮到被压缩。

    “Content Hugging Priority”,也叫内容紧靠优先级(小名:别扯我),该优先级越高,这越晚轮到被拉伸。
    这两句通俗易懂,赞!
  • Fatm:写得很好,解决了今天遇到的问题,感谢分享😊
  • csqingyang:结合实际布局情景最好了。别挤我,别扯我。总结一下用法:
    1 明确是定控件?还是定内容?定控件:指的是各种尺寸屏幕上控件大小都一致?显然大屏幕上能显示的控件能变多进而内容变多。定内容:不同屏幕上的显示内容都是一样的,这就意味着小大屏幕上内容会有一定比例的放缩,进而控件的大小发生变化了。(建议根据 4.7 进行适配,往上往下都方便)。
  • 71122466cd74:看了一堆,还是你的最易理解
  • ee4adf03b628:通俗易懂~
  • HQQ_哈球球:总是爱忘记这俩的区别
  • 2d9efc183006:看英文没看懂 在这里看懂了 多谢啦 :smile:

本文标题:IOS开发之Autolayout——“Content Compr

本文链接:https://www.haomeiwen.com/subject/iakeqttx.html