隐藏navigationController踩过的坑

作者: 强强刘 | 来源:发表于2016-11-03 09:42 被阅读2376次

    前言:开发中经常碰到只有在首页或者某一个页面隐藏navigationController,其他页面全部正常.

    1.如果是这样书写,会出现点击tabbar切换的时候,在回到需要隐藏navigationController的页面时会出现nav跳动问题

    - (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];
    }
    

    正确解决方式如下:

    - (void)viewWillAppear:(BOOL)animated {
        [self.navigationController setNavigationBarHidden:YES animated:NO];
        [super viewWillAppear:animated];
    }
    
    - (void)viewWillDisappear:(BOOL)animated {
        [self.navigationController setNavigationBarHidden:NO animated:NO];
        [super viewWillDisappear:animated];
    }
    

    这样也并不完美:来看第二种异常

    2.假如是在首页隐藏nav,那么我们push到B页在返回时在nav位置则会出现明显的白色条状,如果是使用手势pop则更为明显;

    综上正确解决方案如下:

    - (void)viewWillAppear:(BOOL)animated {
        [self.navigationController setNavigationBarHidden:YES animated:animated];
        
        [super viewWillAppear:animated];
    }
    
    - (void)viewWillDisappear:(BOOL)animated {
        [self.navigationController setNavigationBarHidden:NO animated:animated];
        [super viewWillDisappear:animated];
    }
    

    解释为什么要使用animated,我们点进API可以看到官方的注释

    Hide or show the navigation bar. If animated, it will transition vertically using UINavigationControllerHideShowBarDuration.
    

    大致意思是说隐藏和显示导航栏,如果是使用动画效果,他将使用UINavigationControllerHideShowBarDuration垂直过渡.

    还有一种方案是直接修改keywindow的背景色和nav的背景色一致来解决pop时的白条问题.

    备注:如有不足请指正.

    相关文章

      网友评论

      • 麦子_KB:根本不起作用
      • 匿名的他:首页隐藏nav, present一个导航控制器也会有跳动的问题
        阶梯:@匿名的他 怎么整的标识额? 没看懂呢
        匿名的他:@强强刘 :flushed: 这个学到了👍
        强强刘:@匿名的他 模态时做一个标识,在viewWillDisappear:(BOOL)animated这里写上if(flage != 模态flage){[self.navigationController setNavigationBarHidden:NO animated:animated];}即可

      本文标题:隐藏navigationController踩过的坑

      本文链接:https://www.haomeiwen.com/subject/rzubuttx.html