Intrinsic Content Size
:直译过来是固定内容尺寸,它是autolayout里的一个重要概念。大多数控件有能力根据自己的内容决定自己的size,比如UILabel根据文本可以确定自己的宽度和高度,这被称作固定内容尺寸。通常,使用Intrinsic Content Size
需要设置view的 Content Compression Resistance Priority
和Content Hugging Priority
。
新建一个工程,在storyboard里拖入一个Label;并且添加距离上间距和左间距的约束:

放置第二个label,给第二个label添加左间距,上间距和右间距的约束:

上面并没有给两个label设置宽和高的约束,
这两个label的宽高现在是根据它的文本获得的。我们把第一个label的文本改成A:

这时候会有Content Priority Ambigulty的错误。由于两个label都没有固定的宽度,当其中一个label文本变化需要改变size时,autolayout不知道该如何分配两个label变化的比例。
按照它的提示,需要修改label的content priority,选中第一个label:

查看第二个label,第二个label的Content Hugging Priority和Content Compression Resistance Priority和第一个label是一样的。
- Content Hugging Priority:这个值越高表示越不容易被拉伸;
-
Content Compression Resistance Priority:这个值越高表示越不容易被压缩;
我们把第一个label的Content Hugging Priority的Horizontal改成252,此时它的不被拉伸优先级高于第二个label;storyboard变成了下面这样:
屏幕快照 2018-03-01 上午10.43.04.png
第二个label会被拉伸。
如果把第二个label的 Content Hugging Priority的值比第一个label设置的高,则第二个label不被拉伸,如下所示:

网友评论