1、基本概念
1)和导航控制器一样,是一个容器,用来显示导航栏上的试图, 2) 竖屏44 横屏32
2、配置外观
1) 设置导航栏样式 self.navigationController.navigationBar.barStyle = UIBarStyleBlack; 例如:self.navigationController.navigationBar.barStyle = UIBarStyleBlack;//黑色 2)设置导航栏是否透明,设为不透明能够屏蔽导航栏对试图frame的影响 self.navigationController.navigationBar.translucent = NO;//NO代表不透明 1) 配置背景颜色 self.navigationController.navigationBar.barTintColor = [UIColor magentaColor];//tint |tɪnt|色彩 2)配置背景图片 self.navigationController.navigationBar setBackgroundImage: forBarMetrics: 3) 改变导航栏上默认按钮颜色 self.navigationBar.tintColor
3、配置内容
1)每个controller都有专属的navigationItem 1)通过配置不同控制器的navigationItem让不同控制器的导航栏显示不同的内容 2)navigationItem的常用属性 leftBarButtonItem rightBarButtonItem backBarButtonItem title titleView 3) backBarButtonItem是由上一层控制器控制的 4) 导航栏的prompt属性,通过navigationItem来设置,其主要作用是用于提示用户。比如,用户正在请求网络数据时,提示用户数据正在加载。待加载完成后可以将它的值设置为nil,取消显示。
4)具体的代码做法
给控制器设置标题 self.stitle = @"测试"; self.navigationItem.title = @"测试"; 1.重新设置导航栏的标题样式 UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeContactAdd]; [btn1 addTarget:self action:@selector(clickTitle) forControlEvents:UIControlEventTouchUpInside]; self.navigationItem.titleView = btn1; 2.给导航设置右边的barbuttonItem UIBarButtonItem *reginBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(clickReigter)]; self.navigationItem.rightBarButtonItem = reginBarButtonItem; UIBarButtonItem *style1 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemReply target:self action:@selector(clickReigter)]; 3.给右边设置多个barbuttonitem self.navigationItem.rightBarButtonItems = @[reginBarButtonItem,style1]; //self.navigationItem.leftBarButtonItems =@[reginBarButtonItem,style1]; self.navigationItem.prompt = @"正在努力帮你加载";//增加一个提示(prompt提示)
5)UINavigationBar上面设置的button分类(请认真分析)
1.添加系统自己的button(其他的控制器界面都会显示) [self.navigationController.navigationBar addSubview:rigisterBtn];//设置的BarButton在每一个界面都会显示 2.添加自己当前控制器界面的BarButton(例如,登录页面右上角的注册按钮) (1)self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:rigisterBtn]; (2)添加系统的BarButton(也只有当前系统有这个button) UIBarButtonItem *reginBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(clickReigter)];//刷新 self.navigationItem.rightBarButtonItem = reginBarButtonItem;(刷新按钮) (3)设置多个按钮,按照数组的方式排列在导航栏上(例如在导航栏上添加刷新和返回按钮)
6).导航栏的出现和隐藏方法(可以设置在界面转换的方法里面)
1.让第二个控制器显示的时候,将导航栏隐藏 - (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:YES ]; 或者 self.navigationBarHidden= YES; } 当第二个控制器消失的时候,不隐藏导航栏 - (void)viewDidDisappear:(BOOL)animated{ [super viewDidDisappear:animated]; [self.navigationController setNavigationBarHidden:NO animated:NO]; 或者 self.navigationBarHidden= NO; }
7).重新设置导航栏的返回按钮 继承解决都返回的问题(新建一个类,父类还是UIViewController)(定义一个类让所有的控制器都遵守协议,都设置为返回样式,否则进入界面会成为主题放在导航栏的左边)
重新设置导航栏的返回按钮 继承解决都返回的问题 UIBarButtonItem *customBackItem = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self self.navigationItem.backBarButtonItem = customBackItem;