例子
其实看完上面的叙述,你会思考,到底什么情况下,一个UIView需要只设置坐标不设置大小呢?
其实这种场景相当普遍。比如,我们常常会碰到,一个View中有两个Label,两个Label的高度均和内容有关,这时候,你的View的高度就必须由两个Label的高度有关,而不能一开始就定死。例如。
一个已知宽度的UIView中,有两个UILabel,我希望这个UIView的高度由两个UIlabel的高度来确定。效果如下图。
解决方法:
我们为这个红色View设置了3个约束,分别是。
- Leading space to SuperView:8
- Trailing space to SuperView:8
- Top Space to SuperView:8
也就是分别设置了View的左边距,右边距和上边距,熟悉约束的人应该知道,这时候View的约束是不够的。为什么?
因为,左边距和上边距确定了View的(x,y),然后左边距和右边距确定了这个View的宽度,我们缺少了Height。
但是这个Height,要由View内部的两个label来确定,为了让Xcode不再认为我们拉的约束有问题,再结合我们上面讲的Intrinsic Content Size
,我们可以在Xib的这个位置设置Intrinsic Size
为Placeholder
,这样,Xcode就认为这个View有默认的大小,所以就不会报错了。
为了label能够多行显示,别忘记设置lineofnumber为0.
还有一点需要注意的是,两个UILabel之间肯定是需要一个设置一个垂直约束的,否则整个View就没有办法确定自己的高度,