在项目中经常碰到首页顶部是无限轮播, 需要靠最上面显示. 有的设置导航栏为透明等一系列的方法, 这个可以借助第三方. 或者干脆简单粗暴的直接隐藏掉导航栏. 可是 push 到下一个页面的时候是需要导航栏的, 如何做了, 这里给出两种方法.
第一种做法
- 注意这里一定要用动画的方式隐藏导航栏, 这样在使用滑动返回手势的时候效果最好, 和上面动图一致. 这样做有一个缺点就是在切换 tabBar 的时候有一个导航栏向上消失的动画.
- - (void)viewWillAppear:(BOOL)animated {
- [super viewWillAppear:animated];
- [self.navigationController setNavigationBarHidden:YES animated:YES];
- }
- - (void)viewWillDisappear:(BOOL)animated {
- [super viewWillDisappear:animated];
- [self.navigationController setNavigationBarHidden:NO animated:YES];
- }
第二种做法
设置 self 为导航控制器的代理, 实现代理方法, 在将要显示控制器中设置导航栏隐藏和显示, 使用这种方式不仅完美切合滑动返回手势, 同时也解决了切换 tabBar 的时候, 导航栏动态隐藏的问题.
- @interface WLHomePageController () <UINavigationControllerDelegate>
- @end
- @implementation WLHomePageController
- #pragma mark - lifeCycle
- - (void)viewDidLoad {
- [super viewDidLoad];
- // 设置导航控制器的代理为 self
- self.navigationController.delegate = self;
- }
- #pragma mark - UINavigationControllerDelegate
- // 将要显示控制器
- - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
- // 判断要显示的控制器是否是自己
- BOOL isShowHomePage = [viewController isKindOfClass:[self class]];
- [self.navigationController setNavigationBarHidden:isShowHomePage animated:YES];
- }
来源: http://www.bubuko.com/infodetail-2524585.html