例子

其实看完上面的叙述,你会思考,到底什么情况下,一个UIView需要只设置坐标不设置大小呢?
其实这种场景相当普遍。比如,我们常常会碰到,一个View中有两个Label,两个Label的高度均和内容有关,这时候,你的View的高度就必须由两个Label的高度有关,而不能一开始就定死。例如。
一个已知宽度的UIView中,有两个UILabel,我希望这个UIView的高度由两个UIlabel的高度来确定。效果如下图。

iOS开发实现UIView随着子控件的高度的变化而变化-LMLPHP

解决方法:

我们为这个红色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 SizePlaceholder,这样,Xcode就认为这个View有默认的大小,所以就不会报错了。

iOS开发实现UIView随着子控件的高度的变化而变化-LMLPHP

为了label能够多行显示,别忘记设置lineofnumber为0.
还有一点需要注意的是,两个UILabel之间肯定是需要一个设置一个垂直约束的,否则整个View就没有办法确定自己的高度,

iOS开发实现UIView随着子控件的高度的变化而变化-LMLPHP

05-04 03:39