1.initWithFrame
这个方法是当控件不是从xib、storyboard中创建时,会调用这个方法,比如:
2.initWithCoder
当控件是从xib、storyboard中创建时,就会调用这个方法。
只要我们有在xib或storyboard里引用过,就都会执行initWithCoder和awakeFromNib
3.awakeFromNib
这个方法在initWithCoder:方法后调用 ,顺序是:initWithCoder -> awakeFromNib
一开始经过initWithCoder创建出来的控件是死的,然后通过awakeFromNib来唤醒,所以这会有一个先后的调用顺序。
initWithCoder -> awakeFromNib - > viewDidLoad之后,执行到用代码创建的view,-> initWithFrame
4.layoutSubviews
layoutSubviews, 是系统自带的方法,专门用来对子控件进行布局的方法!
当我们在某个类的内部调整子视图位置时,需要调用。
作用:
1.设置子控件的位置和尺寸
2.能够获取控件的尺寸和位置
3.能够让控件进行'自适应' (因控件发生改变,就会调用此方法)
注意?
控件第一次显示的时候,一定会调用此方法!
当控件尺寸(宽,高)发生改变时,会调用此方法!
当控件位置(X,Y)发生改变是,不会调用此方法!
要调用父类的layoutSubviews([super layoutSubviews]).
layoutSubviews在以下情况下会被调用:
1、init初始化不会触发layoutSubviews
但是是用initWithFrame 进行初始化时,当rect的值不为CGRectZero时,也会触发
2、addSubview会触发layoutSubviews
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
4、滚动一个UIScrollView会触发layoutSubviews
5、旋转Screen会触发父UIView上的layoutSubviews事件
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件