UINavigation Bar
1、概览
Navigation bar本身是一个组织着navigaitn界面的view,由UINavigation controller管理。每个navigation controller都会创建属于自己的navigation Bar来管理自己的navigation bar的内容,一般使用navigation bar,都是通过UINavigation controller来创建、显示及管理。
2、结构
- 结构:UINavigation Bar也是一个栈结构,存放着UInavigationItem对象,提供展示在navigation bar上的buttons和views,可以将其理解为存放UINavigationItem等对象的容器。前面说到navigation controller管理navigation bar,而navigation bar是一个容器,那么navigation的栈结构和navigation item的栈结构必定是平行。而且每个栈中的controller都有提供了一个navigation item作为navigationItem属性的值。
[外链图片转存中…(img-xTTpPigt-1597398210992)]
图中是在运行时一个navigation bar的关键对象,nabigation bar的owner将这些itetms pus到栈或从栈中pop,为了找到钱一个navigation,navigation bar有一个指针指向选择的对象。这样栈中最顶层的item提供现在在navigaiton bar上显示的内容,维持的指针可以创建一个back按钮。
- 界面:有三个基本的位置:left、center和right
- left:通过navigaiton controller获取默认的返回按钮即backBarButtonItem。但是,如果想自定义left button,需要创建UIBarButtonItem分配给leftBarButtonItem
3、使用方式
- 使用UINavigation Controller来控制navigaiton bar
- 创建navigaiton controller
- 使用navigation controller的navigationBar属性设置bar的样式
- 设置push到navigaiton栈上的UIViewController的title和navigation Item属性控制navigation Bar
- 使用独立的navigation bar
4、使用场景总结
(1)、UINavigation设置为透明
设置UINavigationItem为clearColor,设置透明度,但是UINavigationItem无法显示,后来通过setBackgroundImage设置成功,但是navigationBar下面有一条线白线,设置navigaitonBar的setShadowImage属性背景图片即可,代码如下:
-(void)viewWillAppear:(BOOL)animated{
[superviewWillAppear:animated];
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
}
正如前面介绍的,navigationBar,如果不想影响其他页面的导航透明度,viewWillDisappear将其设置为nil即可:
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:nil];
}
1、概览
Navigation bar本身是一个组织着navigaitn界面的view,由UINavigation controller管理。每个navigation controller都会创建属于自己的navigation Bar来管理自己的navigation bar的内容,一般使用navigation bar,都是通过UINavigation controller来创建、显示及管理。
2、结构
- 结构:UINavigation Bar也是一个栈结构,存放着UInavigationItem对象,提供展示在navigation bar上的buttons和views,可以将其理解为存放UINavigationItem等对象的容器。前面说到navigation controller管理navigation bar,而navigation bar是一个容器,那么navigation的栈结构和navigation item的栈结构必定是平行。而且每个栈中的controller都有提供了一个navigation item作为navigationItem属性的值。
图中是在运行时一个navigation bar的关键对象,nabigation bar的owner将这些itetms pus到栈或从栈中pop,为了找到钱一个navigation,navigation bar有一个指针指向选择的对象。这样栈中最顶层的item提供现在在navigaiton bar上显示的内容,维持的指针可以创建一个back按钮。
- 界面:有三个基本的位置:left、center和right
- left:通过navigaiton controller获取默认的返回按钮即backBarButtonItem。但是,如果想自定义left button,需要创建UIBarButtonItem分配给leftBarButtonItem
3、使用方式
- 使用UINavigation Controller来控制navigaiton bar
- 创建navigaiton controller
- 使用navigation controller的navigationBar属性设置bar的样式
- 设置push到navigaiton栈上的UIViewController的title和navigation Item属性控制navigation Bar
- 使用独立的navigation bar
1、UINavigation设置为透明
设置UINavigationItem为clearColor,设置透明度,但是UINavigationItem无法显示,后来通过setBackgroundImage设置成功,但是navigationBar下面有一条线白线,设置navigaitonBar的setShadowImage属性背景图片即可,代码如下:
-(void)viewWillAppear:(BOOL)animated{
[superviewWillAppear:animated];
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
}
正如前面介绍的,navigationBar,如果不想影响其他页面的导航透明度,viewWillDisappear将其设置为nil即可:
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:nil];
}