Auto Layout 的布局是从外到内的,即从屏幕尺寸开始布局,一直布局到最里面的细节元素,我们的目光自然地落在了 viewDidLayoutSubviews 和 viewDidAppear 上了:
1.viewDidLayoutSubviews 时当前视图已经把子元素布局完毕,frame 已经形成
2.viewDidAppear 时,渲染系统把当前视图加入父视图中,显示在屏幕上
注意点:
在自定义控件的初始化方法里约束子视图时,是得不到正确的位置的,因为这个时候自定义控件还没有addSubView,frame没有生效,所以这个时候自动布局是错误的。
解决方法:
自定义控件也用约束布局,那么在自定义控件约束写好后,子视图的布局也就会正确生效。
约束是自外向内的,自定义控件时,控件内部的视图如果使用约束的,外部必须用约束,否则控件内部得不到正确的frame,约束就会错乱。相反,控件内部的子视图如果是frame布局,外部则可以用frame和约束。
网友评论