UINavigationController - 學習筆記
大部分APP都應用了導航控制器(UINavigationController)與標籤控制器(UITableBarController),導航欄(UINavigationBar)的設定是非常重要的,系統的導航欄有很大的侷限性,因此很多情況下都會使用自定義導航欄,或者修改系統導航欄。關於導航控制器以及導航的概念,再簡單提一下,一個導航控制器只有一個導航欄。導航控制器可以有很多子檢視控制器,子檢視控制器上的導航欄的Item和標題可以不同,是因為每個子檢視控制器都有一個導航項(UINavigationItem)。在任何子檢視控制器上修改導航欄自身屬性,會改變整個導航控制器的中的導航欄。
在上一篇博文中有提到, 介紹導航控制器的概念 。
本文主要講解的是基於系統導航欄的自定義使用方法,就是在不隱藏系統導航欄的情況下,修改導航欄的各個屬性。
1.設定背景
建立導航控制器
ViewController *viewCtrl = [[ViewController alloc] init];//預先建立導航控制器的根檢視
UINavigationController *navigationCtrl = [[UINavigationController alloc] initWithRootViewController:viewCtrl];//建立導航控制器
self.window.rootViewController = navigationCtrl;
可以給導航控制器的根檢視設定一個標題。 系統導航欄預設是這種顏色(跟白色有區別)的,而且帶透明效果,導航欄的字型是黑色的,沒有任何按鈕。 在導航控制器的子檢視中設定
self.navigationController.navigationBar.translucent = NO;//設定導航欄透明度 NO表示不透明
self.navigationController.navigationBar.tintColor = [UIColor greenColor];//改變系統按鈕的線條顏色
self.navigationController.navigationBar.barTintColor = [UIColor yellowColor];//改變導航欄的背景顏色,注意使用.backgroundColor去設定背景顏色,只會有淡淡的一層,跟沒效果一樣
UIBarButtonItem *leftItem1 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(clickAction)];//設定一個系統Item
self.navigationItem.leftBarButtonItem = leftItem1;//新增到導航項的左按鈕
系統導航欄也是可以設定背景的圖片的
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
//設定導航欄背景為黑色,標題變成白色 ,目的是讓狀態列字型變成白色
[self.navigationController.navigationBar setBackgroundImage:
[UIImage imageNamed:@"nav_bg_all-64@2x"] forBarMetrics:UIBarMetricsDefault];
//設定導航欄的背景圖片
2.NavigationItem上的按鈕
@property(nonatomic,copy) NSArray *leftBarButtonItems NS_AVAILABLE_IOS(5_0);
//從導航欄的左到右設定按鈕,如果數量過多會把標題往右移
@property(nonatomic,copy) NSArray *rightBarButtonItems NS_AVAILABLE_IOS(5_0);
//從導航欄的右到左設定按鈕,如果數量過多會把標題往左移
@property(nonatomic,retain) UIBarButtonItem *leftBarButtonItem;
//就是leftBarButtonItems第一個元素
@property(nonatomic,retain) UIBarButtonItem *rightBarButtonItem;
//就是rightBarButtonItems第一個元素
@property(nonatomic,retain) UIBarButtonItem *backBarButtonItem;
//這個是返回按鈕,一般push操作後會自帶的,可以進行pop操作。顯示在最左邊,其實就是leftBarButtonItem。
這些按鈕都是UIBarButtonItem,這個按鈕的初始化方法有很多
UIBarButtonItem *systemItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(clickAction)];//設定一個系統Item
UIBarButtonItem *imageItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"11.jpg"] style:UIBarButtonItemStylePlain target:self action:@selector(clickAction)];//帶圖片的按鈕
UIBarButtonItem *titleItem = [[UIBarButtonItem alloc] initWithTitle:@"文字" style:UIBarButtonItemStylePlain target:self action:@selector(clickAction)];//設定一個帶文字的Item
// 設定自定義View,一般設定一個UIButton
UIButton *customButton = [UIButton buttonWithType:UIButtonTypeCustom];
customButton.frame = CGRectMake(0, 0, 25, 25);
[customButton setBackgroundImage:[UIImage imageNamed:@"11.jpg"] forState:UIControlStateNormal];
[customButton addTarget:self action:@selector(clickAction) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithCustomView:customButton];//把button的檢視交給Item
self.navigationItem.leftBarButtonItems = @[systemItem,imageItem];//新增到導航項的左按鈕
self.navigationItem.rightBarButtonItems = @[titleItem,customItem];//新增到導航項的右按鈕
3.設定標題檢視
第一種方法,設定導航欄標題的字型,大小,顏色,陰影。這個是建立在導航欄上的,而不是導航項,因此整個導航控制器都改變。不能用簡單的navigationBar.title.color這樣區設定,你會發現根本沒有這個屬性。
//建立屬性的可變字典
NSMutableDictionary *attributeDict = [NSMutableDictionary dictionaryWithObject:[UIColor greenColor] forKey:NSForegroundColorAttributeName];//新增顏色屬性
// 向可變字典中新增字型屬性
[attributeDict setObject:[UIFont italicSystemFontOfSize:18] forKey:NSFontAttributeName];
NSShadow *shadow = [NSShadow alloc];
shadow.shadowColor = [UIColor orangeColor];//陰影的顏色
shadow.shadowOffset = CGSizeMake(2, 2);//陰影的偏移量
shadow.shadowBlurRadius = 2;//模糊半徑
// 新增陰影屬性
[attributeDict setObject:shadow forKey:NSShadowAttributeName];
// 設定導航欄標題字型屬性,是一個字典
self.navigationController.navigationBar.titleTextAttributes = attributeDict;
可能這個標題看起來有點浮誇- -,只是為了演示效果,大家各取所求。 第二種方法是通過導航項來設定,導航項UINavigationItem有個屬性是titleView。
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 80, 20)];
titleLabel.text = @"自定義標題檢視";
self.navigationItem.titleView = titleLabel;//設定標題檢視
該方法設定也很簡單,而且是設定當前子檢視的。比較靈活。
總結一下,一般的導航欄其實不需要隱藏系統導航欄,通過上面幾種方法就可以改變很多屬性,非常實用,希望能給大家帶來幫助。
轉自——iOS系統導航欄的自定義化
相關文章
- IOS 學習筆記(2) 檢視UINavigationControlleriOS筆記UINavigationController
- numpy的學習筆記\pandas學習筆記筆記
- IT學習筆記筆記
- 學習筆記筆記
- 【學習筆記】數學筆記
- 《JAVA學習指南》學習筆記Java筆記
- Elasticsearch學習筆記Elasticsearch筆記
- Scala學習筆記筆記
- MySql學習筆記MySql筆記
- jQuery 學習筆記jQuery筆記
- react學習筆記React筆記
- 學習筆記(4.3)筆記
- 學習筆記(4.4)筆記
- 學習筆記(3.29)筆記
- 學習筆記(4.1)筆記
- AOP學習筆記筆記
- AspectJ學習筆記筆記
- 學習筆記(3.27)筆記
- 學習筆記(4.2)筆記
- golang 學習筆記Golang筆記
- Zookeeper學習筆記筆記
- 學習筆記(3.24)筆記
- 學習筆記(3.25)筆記
- 學習筆記(3.21)筆記
- GitHub學習筆記Github筆記
- jest 學習筆記筆記
- typescript 學習筆記TypeScript筆記
- Echarts學習筆記Echarts筆記
- js學習筆記JS筆記
- shell學習筆記筆記
- Dubbo 學習筆記筆記
- SVN 學習筆記筆記
- 笨笨學習筆記筆記
- vue學習筆記Vue筆記
- wepack學習筆記筆記
- redis學習筆記Redis筆記
- java學習筆記Java筆記
- PureMVC學習筆記REMMVC筆記