Intrinsic Content Size

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

Intrinsic Content Size_第1张图片
第一个label

放置第二个label,给第二个label添加左间距,上间距和右间距的约束:
Intrinsic Content Size_第2张图片
第二个label

上面并没有给两个label设置宽和高的约束,
这两个label的宽高现在是根据它的文本获得的。我们把第一个label的文本改成A:
Intrinsic Content Size_第3张图片
屏幕快照 2018-03-01 上午10.18.36.png

这时候会有Content Priority Ambigulty的错误。由于两个label都没有固定的宽度,当其中一个label文本变化需要改变size时,autolayout不知道该如何分配两个label变化的比例。
按照它的提示,需要修改label的content priority,选中第一个label:
Intrinsic Content Size_第4张图片
屏幕快照 2018-03-01 上午10.29.50.png

查看第二个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变成了下面这样:


    Intrinsic Content Size_第5张图片
    屏幕快照 2018-03-01 上午10.43.04.png

    第二个label会被拉伸。

如果把第二个label的 Content Hugging Priority的值比第一个label设置的高,则第二个label不被拉伸,如下所示:

Intrinsic Content Size_第6张图片
屏幕快照 2018-03-01 上午10.52.01.png

你可能感兴趣的:(Intrinsic Content Size)