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)建.
有人問,如果用IB創(chuàng)建約束,在viewDidLoad里不能獲取到某個view的正確frame,怎么辦?
這個時候你需要在一個叫viewDidLayoutSubviews()里的方法里獲取一個view的正確frame.
layoutSubviews在以下情況下會被調(diào)用:
1、init初始化不會觸發(fā)layoutSubviews。
2、addSubview會觸發(fā)layoutSubviews。
3、設(shè)置view的Frame會觸發(fā)layoutSubviews,當然前提是frame的值設(shè)置前后發(fā)生了變化。
4、滾動一個UIScrollView會觸發(fā)layoutSubviews。
5、旋轉(zhuǎn)Screen會觸發(fā)父UIView上的layoutSubviews事件。
6、改變一個UIView大小的時候也會觸發(fā)父UIView上的layoutSubviews事件。
7、直接調(diào)用setLayoutSubviews。
setNeedsLayout()方法: 標記為需要重新布局
異步調(diào)用layoutIfNeeded()刷新布局,不立即刷新,但layoutSubviews()一定會被調(diào)用
layoutIfNeeded()方法:如果,有需要刷新的標記,立即調(diào)用layoutSubviews()進行布局(如果沒有標記,不會調(diào)用layoutSubviews())
如果要立即刷新,要先調(diào)用view.setNeedsLayout(),把標記設(shè)為需要布局,然后馬上調(diào)用view.layoutIfNeeded(),實現(xiàn)布局
在視圖第一次顯示之前,標記總是“需要刷新”的,可以直接調(diào)用view.layoutIfNeeded()
public func setNeedsLayout()
public func layoutIfNeeded()
public func layoutSubviews()
總結(jié):
在下面里面方法中獲取view的正確frame,xib,stroyboard 用了autlayout的布局,或者用代碼給view做了布局,但是其子view沒有加布局, 可以在下面方法中設(shè)置子 view的Frame
uiview的layoutSubviews方法
viewcontroller的viewDidLayoutSubviews方法
在哪里創(chuàng)建autolayout.
View中:直接在init方法里創(chuàng)建.
ViewController中:直接在viewDidLoad()里創(chuàng)建.
有人問,如果用IB創(chuàng)建約束,在viewDidLoad里不能獲取到某個view的正確frame,怎么辦?
這個時候你需要在一個叫viewDidLayoutSubviews()里的方法里獲取一個view的正確frame.