导航栏的内容/控件由栈顶控制器的navigationItem模型决定
加入的类型:UIBarButtonItem
注意:也可以UIBarButtonItem返回一个自定义View(initWithCustomView),然后可以setImage设置按钮的图片(正常和高亮),addTarget设置事件,要sizeToFit设置大小!!!
左上角的返回按钮:backBarButttonItem
注意:sizeToFit, self.navigationItem.rightBarButtonItem
中间的文字:title:vc.navigationItem.title
中间的视图:titleView->加入view,注意加入的控件要设置大小。 [lable sizeToFit];
左右两边的内容:leftBarButtonItem/rightBarButtonItem
用navigationBar设置属性
self.navigationController.navigationBar
导航条的背景颜色:
//用背景图片设置背景颜色
- [nav.navigationBar setBackgroundColor:[UIColor redColor]];
导航条的背景图片: //设置导航条的背景图片,只能用默认模式
- [nav.navigationBar setBackgroundImage:forBarMetrics:UIBarMetricsDefault];
导航条的字体的颜色和大小 -NSFontAttributeName [nav.navigationBar setTitleAttributes:];
导航条的前景色,比如按钮的渲染颜色 //nav的渲染颜色
[self.navigationController.navigationBar setTintColor:[UIColor colorWithWhite:barRenderValue alpha:1]];
用图片设置navigetion为透明 方法中forBarMetrics的参数含义: UIBarMetricsDefault, 横竖屏都有效果 UIBarMetricsCompact, 横屏 有效果, 竖屏没有 UIBarMetricsDefaultPrompt 横屏 有效果, 竖屏 没有 UIBarMetricsCompactPrompt
//隐藏nav
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
//隐藏nav下面的线
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
修改返回按钮上的图片-在返回之前的那个界面进行设置
[self.navigationController.navigationBar setBackIndicatorImage:[UIImage imageNamed:@"btn_backItem"]];
[self.navigationController.navigationBar setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"btn_backItem"]];
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"" style:UIBarButtonItemStyleDone target:nil action:nil];```
#### 如设置UINavigation左边/右边的跳转
加到navigationItem,注意此时的控制器要加入到了UINavigation时)的right/left里面去
//注意是UIBarButtonItem类型
UIBarButtonItem *bar = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"menu_icon_bulb"] style:UIBarButtonItemStylePlain target:self action:@selector(push)];
//加入到self.navigationItem.rightBarButtonItem里面。也可以是nitWithTitle等等。
self.navigationItem.rightBarButtonItem = bar;
pop方法会将控制器从栈(viewContrlloers/chirldControllers)移除掉
push方法不会移除控制器
storyBroad设置UINavigation
rootController/show(push-默认加上了Item)
设置导航条
导航条默认下的Scroll会有偏移量(64,0,0,0)
//设置不偏移
self.automaticallyAdijustsScrollViewInsets = NO;
//人为设置scroll的偏移量
self.tableView.contentInset = UIEdgeInsetmake(100,0,0,0);
//隐藏导航条
self.navigationController.navigationBar.hidden = YES;
设置导航条或者导航条上的控件的透明度是没有效果的
//没有效果
self.navigationController.navigationBar.alpha = 0;
思路:设置导航条的图片/颜色-可以用来设置导航条/导航条上的控件的透明度
当图片为空的时候,导航条是半透明度的,当用[[UIImage alloc]init]来创建一个空的图片赋值,导航条的颜色是透明的
//模式必须是UIBarMetricsDefault默认模式
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"hh"] forBarMetrics:UIBarMetricsDefault] ;
//设置导航条下面的线
[self.navigationController.navigationBar setShadowImage:[[UIImage alloc]init];
设置全局对象,统一设置
+ (void)initialize
{
if(self == [WMNavController class] )
{
- 全局对象
-appearanceWhenContainedInInstancesOfClasses:
UINavigationBar *nav = [UINavigationBar
appearanceWhenContainedInInstancesOfClasses:@[[WMNavController class]]];
//字体的大小和颜色
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
dic[NSFontAttributeName] = [UIFont systemFontOfSize:20];
dic[NSForegroundColorAttributeName] = [UIColor whiteColor];
[nav setTitleTextAttributes:dic];
//背景图片NavBar64
[nav setBackgroundImage:[UIImage imageNamed:@"NavBar64"] forBarMetrics:UIBarMetricsDefault];
}
}
跳转判断
for (UIViewController *controller in self.navigationController.viewControllers)
{
if ([controller isKindOfClass:[HomeMainViewController class]])
{
[self.navigationController popToViewController:controller animated:YES];
}
}