完美的自定义导航的思路
实现自定义导航确实有好多种办法
1.可以修改系统原生导航的透明度 这样可以有系统动画的效果
2.可以自定义个view 然后把系统的导航条隐藏条
以上两中方法 有时候避免不了一个问题 就是侧滑控制器 回看见导航条的闪烁 动画不够优美
我现在的这个思路可以完美解决这个问题
1.我采取的是上面的第二种方法
核心代码是- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:YES]; }
然后再viewDidLoad里面添加自定的的view导航
在 viewWillDisAppear里面调用[self.navigationController setNavigationBarHidden:NO animated:YES];
但是如果是两个相邻的控制器都需要自定义导航 有的调转到有导航的页面 有的跳转的没有导航的页面 就会在什么时候去隐藏导航和显示导航 很头疼
2.我想到了一个方法 一般我们搭建的框架都会自定义一个控制器 比如取名BaseViewController
然后 自定义其他控制器的时候都集成与这个控制器.
在BaseViewController
里添加个属性
/** 是否自定义导航的NavBar */
@property (nonatomic, assign) BOOL userDefinedNavBar;
然后再BaseViewController 的- (void)viewWillAppear:(BOOL)animated
这么写
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
//判断是否隐藏导航
if (self.userDefinedNavBar) {
[self.navigationController setNavigationBarHidden:YES animated:YES];
}else {
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
}
3.在用到自定义的控制器里的viewDidLoad
方法里面把这个标识符置为YES
- (void)viewDidLoad {
[super viewDidLoad];
//需要自定义导航
self.userDefinedNavBar = YES;
}
然后就看你自定义的导航是什么效果了 想怎么自定义导航都行 而且还有系统侧滑的动画效果 而且再也不会出现导航闪烁的问题了
以下是我实现的一个小demo 如有问题可以联系我 邮箱rujianbin@163.com
demo地址github