1.navigationBar
UINavigationBar是導(dǎo)航控制器的只讀屬性,UIViewController沒有這個(gè)屬性,顯示在屏幕頂部的欄中,通常與導(dǎo)航控制器結(jié)合使用(這里只說它在導(dǎo)航控制器中的作用)。
@property(nonatomic,readonly) UINavigationBar *navigationBar;
官方文檔里說的很詳細(xì)

所以它的作用就是決定導(dǎo)航欄的外觀,比如:
barStyle
由于UINavigationBar是導(dǎo)航控制器的屬性,所以如果直接繼承UINavigationController
self.navigationBar.barStyle=UIBarStyleBlack;//灰底,白字
self.navigationBar.barStyle=UIBarStyleDefault;//白底,黑字(默認(rèn))
或
[self.navigationBar setBarStyle:UIBarStyleBlack];
如果是UIViewController的子類
self.navigationController.navigationBar.barStyle=UIBarStyleBlack
tintColor導(dǎo)航欄元素項(xiàng)的顏色(上圖topItem,backItem,rightBarButtonItem)
self.navigationBar.tintColor=[UIColor yellowColor];
barTintColor導(dǎo)航欄背景色,默認(rèn)會(huì)有透明效果。
self.navigationBar.barTintColor=[UIColor purpleColor];
translucent默認(rèn)導(dǎo)航欄半透明,設(shè)置NO為不透明,顯示顏色就是設(shè)定的顏色
在設(shè)置為NO之后控制器的view自動(dòng)向下偏移64(導(dǎo)航欄高度的)
self.navigationBar.translucent=NO;
Items,backItem,topItem分別表示為數(shù)組,上一個(gè)控制器,當(dāng)前控制器(棧頂控制器)
Items里面裝著通過- (void)pushNavigationItem:(UINavigationItem *)item animated:(BOOL)animated;進(jìn)來的所有視圖控制器
具體可以參考文檔里面的圖

- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics該方法是設(shè)置導(dǎo)航欄背景圖片的
第一個(gè)參數(shù)backgroundImage是提供的圖片對(duì)象,如果圖像為空[UIImage imageNamed:@""];也能讓背景透明,但是push之后的控制器導(dǎo)航欄會(huì)卡一下。
第二個(gè)參數(shù)是一個(gè)枚舉,UIBarMetricsDefault,UIBarMetricsCompact, UIBarMetricsDefaultPrompt = 101, UIBarMetricsCompactPrompt,是在圖像不夠顯示的時(shí)候(一般是橫豎屏切換的時(shí)候)是否橫向或縱向平鋪
shadowImage陰影圖片,要先設(shè)置backgroundImage才會(huì)有效果,默認(rèn)是黑色的背景色,導(dǎo)航欄下面的黑線就是這張圖片,給個(gè)空?qǐng)D片[UIImage imageNamed:@""]就能去掉黑色(黑線)
prefersLargeTitles 大標(biāo)題,默認(rèn)是NO,設(shè)置為YES標(biāo)題會(huì)變大。
titleTextAttributes導(dǎo)航欄標(biāo)題的title的富文本屬性,但是要設(shè)置導(dǎo)航欄標(biāo)題內(nèi)容不能通過UINavigationBar,要通過navigationItem,后文......
backIndicatorImage返回按鈕的圖片
[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@""]];
backIndicatorTransitionMaskImage設(shè)置了以后再點(diǎn)擊之后(或者返回時(shí)才能看到效果)
[[UINavigationBar appearance]setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@""]];
2.navigationItem
不同于navigationBar,navigationItem是UIViewController的屬性,所以
例如
self.navigationController.navigationItem.title=@"無效";
self.navigationItem.title=@"有效";
導(dǎo)航欄上的navigationItem屬性主要有:
title當(dāng)前控制器的title
//如果自定義可以用
- (instancetype)initWithTitle:(NSString *)title;
titleView自定義的UIView可以替換title
//customView為自定義view
self.navigationItem.titleView=[self customView];
backBarButtonItem,leftBarButtonItem,leftBarButtonItems如果當(dāng)前視圖自定義了leftBarButtonItem這個(gè)按鈕,就顯示這個(gè)自定義的按鈕,如果沒有自定義,但是上一個(gè)視圖自定義了backBarButtonItem就顯示上一個(gè)視圖的backBarButtonItem,如果都沒有就顯示系統(tǒng)默認(rèn)
的back;
leftBarButtonItems顯示為一組按鈕
如果要在當(dāng)前界面自定義就自定義leftBarButtonItem,自定義backBarButtonItem無效。 被push之后就是上一個(gè)視圖對(duì)應(yīng)的backBarButtonItem
UIButton *backButton=[UIButton buttonWithType:UIButtonTypeCustom];
UIBarButtonItem *items=[[UIBarButtonItem alloc]initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = items;
rightBarButtonItem,rightBarButtonItems,rightBarButtonItem默認(rèn)沒有,需要自定義按鈕及點(diǎn)擊事件;rightBarButtonItems和leftBarButtonItems一樣都是一組按鈕
hidesBackButton隱藏返回按鈕,注意隱藏之后(如果沒提供其他方式返回)就不能返回到上一個(gè)視圖,往右滑動(dòng)屏幕也不會(huì)返回
self.navigationItem.hidesBackButton=YES;
leftItemsSupplementBackButton,如果設(shè)置為YES會(huì)在你自定義了
leftBarButtonItem之后也會(huì)顯示系統(tǒng)的返回按鈕。默認(rèn)是NO