Autolayout笔记:自定义View
如果你想在自定义View里用Autolayout进行布局的话,有下面几个点需要注意:
- 指定Intrinsic Content Size
- 区分frame和alignment rect
- 是否支持baseline-aligned布局
- 对子视图进行精确的布局控制
下面将从这些方面逐步讲解。
指定Intrinsic Content Size
这部分的基本概念在上一篇文章已经讲过,这里不再赘述,主要注意三点:
- 重写
intrinsicContentSize
方法。如果这个视图只有一个方向的尺寸设置了Intrinsic Size,那么为另一个方向的尺寸返回UIViewNoIntrinsicMetric
/NSViewNoIntrinsicMetric
。 - 当view的某些属性的改变会影响到Intrinsic Content Size时,需要调用
invalidateIntrinsicContentSize
,例如当UILabel的text变化时,就需要重新计算Intrinsic Content Size。 - 当实现了
intrinsicContentSize
方法后,如果想进一步控制当View的实际大小和intrinsicContentSize`冲突时的行为,需要实现Compression Resistance和Content Hugging这方面的方法,具体做法请看