iOS - UINavigationController簡介

一、簡介

iOS中以棧的形式保存子控制器,如下圖

nav棧.png

導(dǎo)航控制顯示的永遠(yuǎn)是我們棧頂控制器的view

二、 簡單使用

簡單的創(chuàng)建方式

UIViewController*vc = [[UIViewControlleralloc] init];UINavigationController*nav = [[UINavigationControlleralloc] initWithRootViewController:vc];self.window.rootViewController = nav;

三、底層實現(xiàn)

這里講一下 navigation 底層的實現(xiàn)邏輯,其實就是解釋這行代碼的邏輯:

UINavigationController *nav =[[UINavigationController alloc]initWithRootViewController:vc];

底層系統(tǒng)默認(rèn)的調(diào)用了push方法將我們的vc設(shè)置成為棧底跟視圖。

四、層次結(jié)構(gòu)

我們來看看 navigationcontroller 的層次結(jié)構(gòu)

當(dāng)我們將一個控制器裝入一個 navigationcontroller 并設(shè)為跟控制器之后,就會看到層次中多了一個 UILayoutContainerView 中包含了連個視圖,一個是UINavigationTransitionView、一個是UINavigationBar視圖。UINavigationTransitionView 裝載的就是當(dāng)前棧頂控制器所承載的視圖,UINavigationBar 就是我們的導(dǎo)航欄視圖。

nav1.png

nav2.png

nav3.png

五、注意事項

前方高能:automaticallyAdjustsScrollViewInsets這個屬性默認(rèn)將controller上所有的scrollView都向下偏移64,由于筆者被其所坑,找了三天bug才找出它來,所以一定要慎用此屬性。

在iOS7之后,系統(tǒng)默認(rèn)會給導(dǎo)航控制器中所有的UIScrollVIew的頂部添加額外的滾動區(qū)域64,消除方法:

self.automaticallyAdjustsScrollViewInsets =NO;

設(shè)置導(dǎo)航條透明方法:其實是設(shè)置導(dǎo)航條內(nèi)的背景圖片的顏色是透明的

[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];

設(shè)置導(dǎo)航條陰影背景,也是設(shè)置圖片:

[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];

最后編輯于
?著作權(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)容

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