1.initWithFrame
這個(gè)方法是當(dāng)控件不是從xib、storyboard中創(chuàng)建時(shí)虱痕,會(huì)調(diào)用這個(gè)方法域仇,比如:
2.initWithCoder
當(dāng)控件是從xib葫哗、storyboard中創(chuàng)建時(shí)匈辱,就會(huì)調(diào)用這個(gè)方法姊扔。
只要我們有在xib或storyboard里引用過(guò),就都會(huì)執(zhí)行initWithCoder和awakeFromNib
3.awakeFromNib
這個(gè)方法在initWithCoder:方法后調(diào)用 梅誓,順序是:initWithCoder -> awakeFromNib
一開(kāi)始經(jīng)過(guò)initWithCoder創(chuàng)建出來(lái)的控件是死的,然后通過(guò)awakeFromNib來(lái)喚醒佛南,所以這會(huì)有一個(gè)先后的調(diào)用順序梗掰。
initWithCoder -> awakeFromNib - > viewDidLoad之后,執(zhí)行到用代碼創(chuàng)建的view嗅回,-> initWithFrame
4.layoutSubviews
layoutSubviews, 是系統(tǒng)自帶的方法,專門(mén)用來(lái)對(duì)子控件進(jìn)行布局的方法!
當(dāng)我們?cè)谀硞€(gè)類的內(nèi)部調(diào)整子視圖位置時(shí)及穗,需要調(diào)用。
作用:
1.設(shè)置子控件的位置和尺寸
2.能夠獲取控件的尺寸和位置
3.能夠讓控件進(jìn)行'自適應(yīng)' (因控件發(fā)生改變,就會(huì)調(diào)用此方法)
注意?
控件第一次顯示的時(shí)候,一定會(huì)調(diào)用此方法!
當(dāng)控件尺寸(寬,高)發(fā)生改變時(shí),會(huì)調(diào)用此方法!
當(dāng)控件位置(X,Y)發(fā)生改變是,不會(huì)調(diào)用此方法!
要調(diào)用父類的layoutSubviews([super layoutSubviews]).
layoutSubviews在以下情況下會(huì)被調(diào)用:
1绵载、init初始化不會(huì)觸發(fā)layoutSubviews
但是是用initWithFrame 進(jìn)行初始化時(shí)埂陆,當(dāng)rect的值不為CGRectZero時(shí),也會(huì)觸發(fā)
2、addSubview會(huì)觸發(fā)layoutSubviews
3娃豹、設(shè)置view的Frame會(huì)觸發(fā)layoutSubviews焚虱,當(dāng)然前提是frame的值設(shè)置前后發(fā)生了變化
4、滾動(dòng)一個(gè)UIScrollView會(huì)觸發(fā)layoutSubviews
5懂版、旋轉(zhuǎn)Screen會(huì)觸發(fā)父UIView上的layoutSubviews事件
6鹃栽、改變一個(gè)UIView大小的時(shí)候也會(huì)觸發(fā)父UIView上的layoutSubviews事件