zoukankan      html  css  js  c++  java
  • 特定页面隐藏导航栏

         也有一段时间没有解决项目内问题,觉得解决问题要比无目的翻阅技术文档有意义,目的性强记忆也深刻。
         项目中也算是遇见了两处特定页面问题了,上次是特定页面支持横屏的问题,这次是特定页面支持隐藏导航栏问题。
     
         问题描述:
         接到修改时懵住了,忘记导航栏可以隐藏这个问题了,还是UI设计师给我拿出其他App效果后,我才加紧寻找解决方案,看到导航栏隐藏几个字,瞬间就笑了。常解决控制器实现特效啊、项目配置啊等等大难题,反而小学生的问题给懵住了。然后就开始设置隐藏导航栏的问题。
         
         解决方案:
         1.简单讲,在- (void)viewWillAppear;方法中隐藏导航栏;
         2.在-(void)viewWillDisappear;方法中显示导航栏;
     
         存在问题:
         仅做此处理是要出现两个问题的;
         1.消失是正常的,当childController做popViewController时,导航栏右侧会闪现黑框,非常明显;
         2.当做模态presentViewcontroller弹出下一个带有导航控制器的页面时,本页面导航栏会先复现导航栏再做跳转;当childController做dismissViewController时,导航栏顶部会闪现黑框,非常明显;
     
         解决问题:
         1.第一个问题较易解决,在隐藏方法里设定动画为YES,在复现方法里设定动画为NO;
         2.第二个问题稍微麻烦些,要添加一个新的属性来标注是否需要隐藏,稍后详解;
         先贴代码:
     
         导航栏隐藏方法:
          - (void)viewWillAppear:(BOOL)animated {
        [superviewWillAppear:animated];
        if (_disappearLoginToviewWillAppear) {
            _disappearLoginToviewWillAppear = NO;
        }
        else {
            [self.navigationControllersetNavigationBarHidden:YESanimated:YES];
        }
    }
     
         导航栏复现方法:
    - (void)viewWillDisappear:(BOOL)animated {
        [superviewWillDisappear:animated];
        if (_presentLoginToViewWillDisappear) {
            _presentLoginToViewWillDisappear = NO;
        }
        else {
            [self.navigationControllersetNavigationBarHidden:NOanimated:YES];
        }
    }
     
         两个属性(其实一个已经够用,此处做理解才用两个)
         BOOL _presentLoginToViewWillDisappear;  //是否是由于弹起登录视图,导致个人中心控制器触发viewWillDisappear
        BOOL _disappearLoginToviewWillAppear;   //是否是由于登录视图弹出,导致个人中心控制器触发viewWillAppear
     
         跳转处赋值属性:
          UIStoryboard *stroyboard = [UIStoryboardstoryboardWithName:@"Login"bundle:nil];
                        UINavigationController *loginNav = [stroyboard instantiateViewControllerWithIdentifier:@"LoginNavigation"];
                        _presentLoginToViewWillDisappear = YES;
                        [selfpresentViewController:loginNav animated:YEScompletion:^{
                            _disappearLoginToviewWillAppear = YES;
                        }];
     
         
         注解:
         为什么要添加一个属性做判断呢,因为我们做隐藏和复现导航栏,逻辑上没有错,但是不能不管黑白一棒子打死,同一个导航栏情况下,当然可以简单实现,但是作为登录页面,多数作为单独模块来做,肯定不是一个导航控制器了,当然我也看过整个项目使用一个故事版完成几十个页面控制器的,我表示佩服,不懂怎么做团队协同,你说不协同,那我无话可说,你离开公司以后还是一个人维护吗?言归正传,如果不是一个导航控制器,你做隐藏导航栏是徒劳的,反而化蛇添足,所以,判断下,是否是同一个导航栏,如果不是,那么就不用复现了,保持隐藏。
     
         写在最后:
         为什么整理这么一篇低水准,较冷门的博文?我完成此功能前也上了不同网站寻找前师的教诲,但是很琐碎,有些仅提示了思路,其实两个问题中的第一个都没有解决,仅告诉了进来的时候隐藏,出去的时候复现。第二个问题更是完全没涉及,我想,不会没有人遇到同样问题的,一个方便一次性决绝特定导航栏隐藏问题,另一个是整理了大师们琐碎的答案吧。最后还是谢谢大家查阅,本小白,老鸟绕行,大牛轻拍!
  • 相关阅读:
    MySQL数据库:数据完整性及约束的应用
    MySQL数据库:运算符
    MySQL数据库:合并结果集
    MySQL数据库:聚合函数的使用
    spring web mvc环境搭建
    golang中type常用用法
    有些事情,你真的要早点明白
    一个小事例,了解golang通道阻塞模式
    golang中,slice的几个易混淆点
    作为面试官的一点小感想
  • 原文地址:https://www.cnblogs.com/guoqiangx-5/p/5780224.html
Copyright © 2011-2022 走看看