今天在解決問題時,突然發(fā)現(xiàn)自己對navigationbar不甚了解,在看了風(fēng)往北吹的這篇iOS 自定義導(dǎo)航欄筆記之后,決定跟隨作者的筆記親自實踐一下,so,就有了一下的內(nèi)容.
1. 隱藏導(dǎo)航欄的方法
兩種方法皆可
[self.navigationController setNavigationBarHidden:YES animated:YES];
[self.navigationController.navigationBar setHidden:YES];
通過屬性直接設(shè)置之所以能成功犀概,是因為雖然navigationBar是readonly薯定,但是hidden是默認的(readwrite)申尤。建議使用第一個袄琳,通過發(fā)送消息來設(shè)置----風(fēng)往北吹
2.關(guān)于自定義導(dǎo)航欄背景的一些發(fā)現(xiàn).
- 方案1:通過代理來設(shè)置
[[UINavigationBar appearance] setBarTintColor:[UIColor redColor]];
PS:這個方法確實可以起到改變導(dǎo)航欄顏色的作用,但是我發(fā)現(xiàn)只在特定的地方調(diào)用這個方法才會起作用:
1.在Appledelegate.m中的
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
方法中調(diào)用;
2.在自定義的CustomNavigationController(繼承自UINavigationController)中調(diào)用.
- 方案2.直接通過設(shè)置navigationBar的相關(guān)屬性來實現(xiàn)
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
先觀察一下圖層關(guān)系:
PS:此處引用風(fēng)往北吹的一段話:
UINavgationBar結(jié)構(gòu)圖說明:
1.從圖中的對照關(guān)系可以看到,UINavigationBar包含一個:UINavigationBarBackground控件(已經(jīng)延伸到邊界辕坝,覆蓋掉了導(dǎo)航欄),另一個UINavigationBarBackIndicatorView(其實就是那個藍色的返回按鈕闻蛀,當(dāng)push進來一個ViewController才會顯示)
2.UINavigationBarBackground控件里面包含:UIBackdropView(UIBackdropEffectView帶有高斯模糊效果的視圖),UIImageView(導(dǎo)航欄下方的陰影分割線)
通過觀察設(shè)置barTintColor前后的圖層發(fā)現(xiàn),無論上面的那種方法,只要設(shè)置了navigationBar的barTintColor屬性,在UIBackdropView上面都會多出兩個view其中一個view的顏色正是我們所設(shè)置的barTint的color顏色.
- 方案3.通過設(shè)置navgationBar.backgroundColor 來改變背景色.
具體的設(shè)置方法,在風(fēng)往北吹的文章中說的很清楚了.
我只是補充一些內(nèi)容
使用這個方法來修改navgationBar的背景色的時候最好和下面這個方法搭配使用
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.backgroundColor = [UIColor redColor];
至于BackgroundImage:這個參數(shù)的規(guī)格,我們接下來討論.
- BackgroundImage:一個空的圖片對象
觀察圖層發(fā)現(xiàn)navigationBar的UINavigationBarBackground上沒有了UIBackdropView這個圖層,只有一個image(shadowline).此時導(dǎo)航欄是透明的.
-
BackgroundImage:一個特定高度的圖片對象
設(shè)置bar的BackgroundImage為高度為44的圖片.png
當(dāng)圖片的導(dǎo)讀恰好是44的時候,圖層如上圖,狀態(tài)欄會變成黑色.UINavigationBarBackground上多了UIBarBackgroundTopCurtainView和UIBarBackgroundCustomImageCurtainView
-
BackgroundImage:一個高度>64的圖片對象
設(shè)置bar的BackgroundImage為高度為>64的圖片.png
此時,UINavigationBarBackground就從一個透明的圖片變?yōu)榱宋覀兯O(shè)置的那張圖片.(至于圖片是否被壓縮,需要大家親自試一下)
4.BackgroundImage:一個高度<44的圖片對象
設(shè)置bar的BackgroundImage為高度<44的圖片.png
此時,UINavigationBarBackground就從一個透明的圖片變?yōu)榱宋覀兯O(shè)置的那張圖片.(圖片是通過平鋪的方式從上到下鋪滿64個高度的.)
在測試過程中還發(fā)現(xiàn),如果設(shè)置了BackgroundImage:,則barTintColor的設(shè)置將會無效,同時設(shè)置BackgroundImage:時,BarMetrics:的值只有是UIBarMetricsDefault時圖片設(shè)置非空對象(此指不是[UIImage new])的時候,圖片才能正常的顯示出來.至于為什么還請大神指點一下.謝謝.