關(guān)于 Xcode8中 autolayout 約束作用時間問題

1.關(guān)于 awakeFromNib

awakeFromNib 是繼承自 NSObject
這個方法是用來提供把 nib 文件加載到 application 中的,但是 nib 文件中添加的約束是什么時候生效的呢?

在 vc 的 viewDidLoad 調(diào)用之前,會先調(diào)用添加到 vc.view的子 View 的 awakeFromNib 方法(如果是從 nib 加載),

2.layoutSubViews

從文檔里可以看到,在 iOS5.1之前,這個方法does nothing,
否則,我們可以重寫layoutSubViews中的約束來確定任何 subViews,不要直接調(diào)用,可以下一次視圖更新之前調(diào)用 setNeedsLayout,如果想立即更新,調(diào)用 layoutIfNeeded.
view 的 layoutSubViews 被調(diào)用的情況:
1.addSubView
2.frame 發(fā)生改變
3.滑動 UIScrollView
4.旋轉(zhuǎn) Screen
5.改變 view的 subview 的 frame
6.調(diào)用 setLayoutSubViews

3.setNeedsLayout

標記為需要重新布局,異步調(diào)用 layoutIfNeeded,
在下一次 重新布局update cycle 之前調(diào)用 ,在主線程調(diào)用,因為 UIKit 下面的都不是線程安全的

4.layoutIfNeeded

立即刷新 UI

5.viewDidLayoutSubviews

當 vc.view的 bounds發(fā)生變化的時候,比如旋轉(zhuǎn)。view會調(diào)整 subviews 的 position,然后系統(tǒng)會調(diào)用這個方法。

3.storyBoard 中約束作用時間問題

先在 storyBoard 的 vc.view 中添加一個 viewA,
我試著在 VC 的 awakeFromNib 里面打印在viewA,為nil,如果對 viewA 發(fā)送消息也是無效的,因為 viewA 為 nil。但是 vc.view 的信息能打印出來,vc.view 的約束是正確的.
那么在 storyBoard 中的 vc.view 上添加的子 View 是什么時候創(chuàng)建的呢?

在 viewDidLoad 方法中打印 viewA,關(guān)鍵的來了,如果 storyBoard 中 viewA 存在 misplaced,viewA 打印出來的是viewA:<UIView: 0x7fd8595055e0; frame = (67 253; 240 128); autoresize = RM+BM; layer = <CALayer: 0x60800003ecc0>>,但是如果 updateFrames 之后,打印的是viewA:<UIView: 0x7feab1608610; frame = (0 0; 1000 1000); autoresize = RM+BM; layer = <CALayer: 0x608000035140>>
所以一旦把 viewA updateFrames,約束的作用時間就延后了,在 ViewDidLoad 之后??
我又試著在 storyBoard 的 vc.view中添加了一個 子 view: viewB
在 viewDidLoad 中手動添加約束,發(fā)現(xiàn)是能獲取到 viewA 的約束的,說明在 storyBoard更新約束后, viewA 的約束作用時間確實延后了

[UINib instantiateWithOwner:options:]方法會調(diào)用[ViewController awakeFromNib],

VC 的 awakeFromNib 會調(diào)用 nib 文件里面 vc 的view 的子 View,然后 VC awakeFromNib
然后[UIViewController loadViewIfRequired]會調(diào)用[ViewController viewDidLoad]方法,

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • UIViewController 的生命周期答:來源:http://www.cnblogs.com/dahe007...
    IreneWu閱讀 695評論 1 2
  • 1.自定義控件 a.繼承某個控件 b.重寫initWithFrame方法可以設(shè)置一些它的屬性 c.在layouts...
    圍繞的城閱讀 3,694評論 2 4
  • 1. 啟動流程 1.1 準備知識 Mach-O Apple的操作系統(tǒng)的可執(zhí)行文件格式幾乎都是mach-o,mach...
    我有小尾巴快看閱讀 3,314評論 1 37
  • 他的粉絲看到的話,會不會人肉我,怕怕…… 第二次畫人物寫實,感覺眼神真的是最難畫的…… 朋友說只有左眼像,你們覺得...
    糖醋羅飛魚閱讀 394評論 6 1
  • 如果當初… 愛情,理想不能平行前行,兩個人即成為不相交的平行線的矛盾,體會不到像他們那樣深刻,只不過,聽他們說的在...
    sue貓閱讀 356評論 0 0

友情鏈接更多精彩內(nèi)容