1. 在viewDidLoad 时,geometry并未最终确定(此时ViewController 的 view 刚刚加载完成),
(如果使用storyboard, view 的大小是storyboard中vc 的大小(不确定最新的系统是否有变化))
这时如果依赖 View 的 frame 或者 bounds 进行某种操作,是不可靠的
2. 在viewDidLoad 之前,storyboard 中的Outlet 还未设置, 当用segue 转场时,若要对Outlet 属性进行操作,是无效的。
3. 只要geometry变化,viewWillLayoutSubviews 和 viewDidLayoutSubviews 就会调用(vc 先调用viewWillLayoutSubviews,View Controller 的 view 再调用 layoutSubview,最后调用viewDidLayoutSubviews)。
在viewWillAppear 和viewDidAppear 之间可能会调用多次, 因此最好不用在这两个方法中进行耗时的操作。
一般在以上方法中需要做什么:
1. viewDidLoad
初始化设置 view controller(如从本地或网络读取数据)
布局,添加各种event, gesture等
如上所述,不要再这里初始化任何geometry相关的内容,因为geometry未确定
2. viewWillAppear, viewDidAppear,viewWillDisappear,viewDidDisappear
增加和移除observer,应配对出现,以上的方法是很好的时机;
在viewDidAppear 中最好不要做改变UI相关的事情,因为UI已经呈现,再改变,容易给人卡顿的错觉。