RTRootNavigationController是iOS开发里面经常用到的第三方框架,可以用cocoapods导入项目中,使用TRootNavigationController可以自定义导航栏
参考:http://www.cocoachina.com/ios/20161121/18137.html
-
TRootNavigationController的使用
TRootNavigationController可以达到这个效果:页面手势返回时 导航条跟随控制器一起滑动
1.在AppDelegate里面设置根视图
AppDelegate.m
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window setBackgroundColor:[UIColor whiteColor]];
self.window.rootViewController = [[RTRootNavigationController alloc] initWithRootViewController:[[CFFRootViewController alloc] init]];
[self.window makeKeyAndVisible];
2.在base类导入一下TRootNavigationController.h头文件就行,也可以把TRootNavigationController.h放到pch文件里面,base类,每个vc都需要继承它
base.h
#import <UIKit/UIKit.h>
//导入一下
#import <RTRootNavigationController/RTRootNavigationController.h>
@interface CFFBaseViewController : UIViewController
@end
base.m
//重写RTRootNavigationController里方法,修改返回按钮;在其他控制器想设置导航栏不一样,可以在其他控制器重写该方法修改当前控制器的导航栏
- (UIBarButtonItem *)rt_customBackItemWithTarget:(id)target action:(SEL)action {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setImage:[UIImage imageNamed:@"left"] forState:UIControlStateNormal];
[btn sizeToFit];
[btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
return [[UIBarButtonItem alloc] initWithCustomView:btn];
}
3.如果有底部栏,在root根视图里面
//RTContainerNavigationController是RTRootNavigationController导航栏的类
UIViewController *vc1 = [CFFMainViewController new];
RTContainerNavigationController *nc1 = [[RTContainerNavigationController alloc] initWithRootViewController:vc1];
vc1.tabBarItem.title = @"首页";
UIViewController *vc2 = [CFFDynamicViewController new];
RTContainerNavigationController *nc2 = [[RTContainerNavigationController alloc] initWithRootViewController:vc2];
vc2.tabBarItem.title = @"动态";
UIViewController *vc3 = [CFFMeViewController new];
RTContainerNavigationController *nc3 = [[RTContainerNavigationController alloc] initWithRootViewController:vc3];
nc2.rdv_tabBarItem.title = @"我的";
UIViewController *centerVC = [[ViewController alloc] init];
RTContainerNavigationController *ncCenter = [[RTContainerNavigationController alloc] initWithRootViewController:centerVC];
self.viewControllers = @[nc1,nc2,ncCenter,nc3];
4.视图跳转
CFFPlayViewController *playVC = [[CFFPlayViewController alloc] init];
//导入RTRootNavigationController,依然可以用自带的导航栏跳转
[self.navigationController pushViewController:playVC animated:YES];
//使用RTRootNavgationController的跳转方式
// [self.rt_navigationController pushViewController:playVC animated:YES complete:nil];
- 导航栏属性修改
//修改导航栏颜色 可以设置barTintColor
tintColor:item字体颜色(修改所有界面的导航栏按钮,如果使用了RTRootNavigatonController,则设置该属性,只改变当前导航栏按钮) barTintColor:导航栏背景颜色(修改所有界面的导航栏,如果使用了RTRootNavigatonController,则设置该属性,只改变当前导航栏)
self.navigationController.navigationBar.barTintColor = [UIColor groupTableViewBackgroundColor];
修改导航栏颜色 也可以导航栏背景图片
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor grayColor]] forBarMetrics:UIBarMetricsDefault]; //导航栏背景图片
//隐藏导航栏分割线
[self.navigationController.navigationBar setClipsToBounds:YES];
//修改导航栏分割线 设置阴影分割线,和背景图片一起设置才有效果
如果想隐藏分割线,也可以阴影分割线,和背景图片设置一样的颜色
[self.navigationController.navigationBar setShadowImage:[UIImage imageWithColor:[UIColor redColor]]]; //导航栏分割线
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor grayColor]] forBarMetrics:UIBarMetricsDefault]; //导航栏背景图片