1.navigationBar
UINavigationBar是導航控制器的只讀屬性,UIViewController沒有這個屬性,顯示在屏幕頂部的欄中,通常與導航控制器結合使用(這里只說它在導航控制器中的作用)。
@property(nonatomic,readonly) UINavigationBar *navigationBar;
官方文檔里說的很詳細
所以它的作用就是決定導航欄的外觀,比如:barStyle
由于UINavigationBar是導航控制器的屬性,所以如果直接繼承UINavigationController
self.navigationBar.barStyle=UIBarStyleBlack;//灰底,白字
self.navigationBar.barStyle=UIBarStyleDefault;//白底,黑字(默認)
或
[self.navigationBar setBarStyle:UIBarStyleBlack];
如果是UIViewController的子類
self.navigationController.navigationBar.barStyle=UIBarStyleBlack
tintColor
導航欄元素項的顏色(上圖topItem,backItem,rightBarButtonItem)
self.navigationBar.tintColor=[UIColor yellowColor];
barTintColor
導航欄背景色,默認會有透明效果。
self.navigationBar.barTintColor=[UIColor purpleColor];
translucent
默認導航欄半透明,設置NO為不透明,顯示顏色就是設定的顏色
在設置為NO之后控制器的view自動向下偏移64(導航欄高度的)
self.navigationBar.translucent=NO;
Items,backItem,topItem
分別表示為數組,上一個控制器,當前控制器(棧頂控制器)
Items里面裝著通過- (void)pushNavigationItem:(UINavigationItem *)item animated:(BOOL)animated;
進來的所有視圖控制器
具體可以參考文檔里面的圖
- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics
該方法是設置導航欄背景圖片的
第一個參數backgroundImage是提供的圖片對象,如果圖像為空[UIImage imageNamed:@""];
也能讓背景透明,但是push之后的控制器導航欄會卡一下。
第二個參數是一個枚舉,UIBarMetricsDefault,UIBarMetricsCompact, UIBarMetricsDefaultPrompt = 101, UIBarMetricsCompactPrompt,是在圖像不夠顯示的時候(一般是橫豎屏切換的時候)是否橫向或縱向平鋪
shadowImage
陰影圖片,要先設置backgroundImage才會有效果,默認是黑色的背景色,導航欄下面的黑線就是這張圖片,給個空圖片[UIImage imageNamed:@""]就能去掉黑色(黑線)
prefersLargeTitles
大標題,默認是NO,設置為YES標題會變大。
titleTextAttributes
導航欄標題的title的富文本屬性,但是要設置導航欄標題內容不能通過UINavigationBar,要通過navigationItem,后文......
backIndicatorImage
返回按鈕的圖片
[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@""]];
backIndicatorTransitionMaskImage
設置了以后再點擊之后(或者返回時才能看到效果)
[[UINavigationBar appearance]setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@""]];
2.navigationItem
不同于navigationBar,navigationItem是UIViewController的屬性,所以
例如
self.navigationController.navigationItem.title=@"無效";
self.navigationItem.title=@"有效";
導航欄上的navigationItem屬性主要有:
title
當前控制器的title
//如果自定義可以用
- (instancetype)initWithTitle:(NSString *)title;
titleView
自定義的UIView可以替換title
//customView為自定義view
self.navigationItem.titleView=[self customView];
backBarButtonItem,leftBarButtonItem,leftBarButtonItems
如果當前視圖自定義了leftBarButtonItem
這個按鈕,就顯示這個自定義的按鈕,如果沒有自定義,但是上一個視圖自定義了backBarButtonItem
就顯示上一個視圖的backBarButtonItem
,如果都沒有就顯示系統默認
的back;
leftBarButtonItems
顯示為一組按鈕
如果要在當前界面自定義就自定義leftBarButtonItem,自定義backBarButtonItem無效。 被push之后就是上一個視圖對應的backBarButtonItem
UIButton *backButton=[UIButton buttonWithType:UIButtonTypeCustom];
UIBarButtonItem *items=[[UIBarButtonItem alloc]initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = items;
rightBarButtonItem,rightBarButtonItems
,rightBarButtonItem默認沒有,需要自定義按鈕及點擊事件;rightBarButtonItems
和leftBarButtonItems
一樣都是一組按鈕
hidesBackButton
隱藏返回按鈕,注意隱藏之后(如果沒提供其他方式返回)就不能返回到上一個視圖,往右滑動屏幕也不會返回
self.navigationItem.hidesBackButton=YES;
leftItemsSupplementBackButton
,如果設置為YES會在你自定義了
leftBarButtonItem
之后也會顯示系統的返回按鈕。默認是NO
收錄:原文地址
推薦個不錯的iOS進階視頻,感興趣可看一看:觀看地址