一、为什么UILabel UIImageView UIButton 可以不指定尺寸约束
说到模糊约束,content Hugging/content Compression Resistance就是2个UIView自带的模糊约束。 而这两个约束存在的条件则是UIView必须指定了 Intrinsic Content Size。 在了解这两个模糊约束之前,必须了解Intrinsic Content Size是什么东西。
Intrinsic Content Size:固有大小(Intrinsic 是内在的
意思)。顾名思义,在AutoLayout中,它作为UIView的属性(不是语法上的属性),意思就是说我知道自己的大小,如果你没有为我指定大小,我就按照这个大小来。 比如:大家都知道在使用AutoLayout的时候,UILabel是不用指定尺寸大小的,只需指定位置即可,就是因为,只要确定了文字内容,字体等信息,它自己就能计算出大小来。

UILabel,UIImageView,UIButton等这些组件及某些包含它们的系统组件都有 Intrinsic Content Size 属性。 也就是说,遇到这些组件,你只需要为其指定位置即可。大小就使用Intrinsic Content Size就行了。
在代码中,上述系统控件都重写了UIView 中的 -(CGSize)intrinsicContentSize: 方法。 并且在需要改变这个值的时候调用:invalidateIntrinsicContentSize 方法,通知系统这个值改变了。
所以当我们在编写继承自UIView的自定义组件时,也想要有Intrinsic Content Size的时候,就可以通过这种方法来轻松实现。
二UILabel 抗压缩、抗拉伸约束简述
首先主要介绍:Priority(控件约束的优先级)、Content Hugging Priority(控件抗拉伸优先级)、Content Compression Resistance Priority(控件抗压缩优先级),好的,开始一个个介绍。
-
1.Priority控件中每一个约束都有优先级,在xib和storyboard中很容易看到,如图:
Snip20180919_7.png
-
2.Content Hugging Priority(控件抗拉伸优先级) 优先级越高越不容易被拉伸,默认是250。
Snip20180919_9.png
- 3.Content Compression Resistance Priority(控件抗压缩优先级) 和拉伸一样,优先级越高的越不容易和压缩,默认是750。

-
案例:
Snip20180919_11.png
网友评论