iOS 视图生命周期

2018-02-24  本文已影响68人  iOS_肖晨

控制器

控制器生命周期简介:

  1. init-初始化程序
  2. loadView-从nib载入视图
  3. viewDidLoad-加载视图
  4. viewWillAppear-即将出现
  5. viewWillLayoutSubviews-即将加载子视图
  6. viewDidLayoutSubviews-已经加载子视图
  7. viewDidApper-已经出现
  8. viewWillDisappear-即将消失
  9. viewDidDisappear-已经消失
  10. viewWillUnload-即将释放
  11. viewDidUnload-已经释放

布局

我们能看到手机上的视图都是UIView还有它的子UIView,当然不能杂乱无章的显示。要进行布局,父UIView需要布局、排列这些子UIView。UIView提供了layoutSubviews方法来处理。
一般情况视图方法layoutSubviews调用顺序为:

viewDidLayoutSubviews (控制器)
layoutSubviews
drawRect:
viewDidApper (控制器)

需要注意的是layoutSubviews方法由系统来调用,不能程序员来手动调用。可以用以下两个手动方法调用:

  1. setNeedsLayout方法进行标记,在UI下个刷屏循环中系统会调用layoutSubviews。
  2. layoutIfNeeded直接请求系统调用layoutSubviews。

layoutSubviews的自动被调用的时机:

  1. addSubview会触发layoutSubviews,比如viewA add viewB,第一次添加A和B的layoutSubviews都会被调用,而第二次(viewA已经有了viewB)只调用viewB的
  2. view的Frame变化
  3. 滚动UIScrollView会触发layoutSubviews
  4. 旋转Screen会触发父UIView上的layoutSubviews
  5. 改变transform属性时,当然frame也会变
  6. 处于key window的UIView才会调用(程序同一时间只有一个window为keyWindow,可以简单理解为显示在最前面的window为keywindow)

另:关于 sizeToFit需要注意如下:

  1. sizeToFit会自动调用sizeThatFits方法。
  2. sizeToFit不应该在子类中被重写,应该重写sizeThatFits。
  3. sizeThatFits传入的参数是receiver当前的size,返回一个适合的size。
  4. sizeToFit可以被手动直接调用。
  5. sizeToFit和sizeThatFits方法都没有递归,对subviews也不负责,只负责自己。
上一篇下一篇

猜你喜欢

热点阅读