隐藏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时的白条问题.

备注:如有不足请指正.

相关文章

  • 隐藏navigationController踩过的坑

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

  • 交互设计师所要避免的几个坑

    前言 工作中难免会踩到几个坑,即使现在不踩以后还会踩,只有踩过才会深刻记住,踩过说明爱过!但是踩过的坑必须把坑填满...

  • supervisor遇到Too many open files

    Supervisor 的一个隐藏坑 <踩坑>supervisor中的minfds及minprocs参数用途

  • vue踩过的坑

    vue踩过的坑

  • D1094:踩坑的价值最大化

    是人就会踩坑,不踩坑理论上就不属于人类,踩坑是人之常情,能回头站在坑边反思,才是对踩过的的坑价值最大化的体现,要不...

  • 隐藏NavigationBar时的一个坑

    最近工作踩坑不少,又踩了一个。需求是这样的,只在首页隐藏Navigation Bar,其他页面都不隐藏。我在第一个...

  • 投资避坑指南

    2022年9月14日(第224天) 经常反思踩过的坑,犯过的错,了解别人踩过的坑,犯过的错,思考如何避免自己下次踩...

  • PHP中的数据类型

    一说到数据类型,这个坑就太多了,多到有哪些坑,有多少坑,不知道自己还会踩哪些坑,以及踩过的坑还会不会再踩,我对...

  • 踩过的坑

    1、关于Windows下修改hosts文件无法生效,刚开始直接用浏览器打开发现404,后来ping域名才发现是连接...

  • 踩过的坑

    问题: 虚拟机中一打开metasploit就死机。 答: 发现虚拟机分配内存512M。分配2G后,正常。 问题: ...

网友评论

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

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

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