5.5, 1242*2208 414*736
4.7, 750*1334 375*667
4.0, 640*1136 320*568
3.5, 640*960 320*480
在哪里創(chuàng)建autolayout.
View中:直接在init方法里創(chuàng)建.
ViewController中:直接在viewDidLoad()里創(chuàng)建.
有人問(wèn),如果用IB創(chuàng)建約束,在viewDidLoad里不能獲取到某個(gè)view的正確frame,怎么辦?
這個(gè)時(shí)候你需要在一個(gè)叫viewDidLayoutSubviews()里的方法里獲取一個(gè)view的正確frame.
layoutSubviews在以下情況下會(huì)被調(diào)用:
1公荧、init初始化不會(huì)觸發(fā)layoutSubviews瘪吏。
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事件。
7双揪、直接調(diào)用setLayoutSubviews动羽。
setNeedsLayout()方法: 標(biāo)記為需要重新布局
異步調(diào)用layoutIfNeeded()刷新布局,不立即刷新渔期,但layoutSubviews()一定會(huì)被調(diào)用
layoutIfNeeded()方法:如果运吓,有需要刷新的標(biāo)記,立即調(diào)用layoutSubviews()進(jìn)行布局(如果沒(méi)有標(biāo)記疯趟,不會(huì)調(diào)用layoutSubviews())
如果要立即刷新拘哨,要先調(diào)用view.setNeedsLayout(),把標(biāo)記設(shè)為需要布局信峻,然后馬上調(diào)用view.layoutIfNeeded()倦青,實(shí)現(xiàn)布局
在視圖第一次顯示之前,標(biāo)記總是“需要刷新”的盹舞,可以直接調(diào)用view.layoutIfNeeded()
public func setNeedsLayout()
public func layoutIfNeeded()
public func layoutSubviews()
總結(jié):
在下面里面方法中獲取view的正確frame产镐,xib隘庄,stroyboard 用了autlayout的布局,或者用代碼給view做了布局癣亚,但是其子view沒(méi)有加布局丑掺, 可以在下面方法中設(shè)置子 view的Frame
uiview的layoutSubviews方法
viewcontroller的viewDidLayoutSubviews方法
在哪里創(chuàng)建autolayout.
View中:直接在init方法里創(chuàng)建.
ViewController中:直接在viewDidLoad()里創(chuàng)建.
有人問(wèn),如果用IB創(chuàng)建約束,在viewDidLoad里不能獲取到某個(gè)view的正確frame,怎么辦?
這個(gè)時(shí)候你需要在一個(gè)叫viewDidLayoutSubviews()里的方法里獲取一個(gè)view的正確frame.