NavigationController在iOS App中是最常见不过了,可以说是每个App中必备的了。自iOS7开始,系统自带的右滑返回效果,也可以让有NavigationBar的视图切换很丝滑流畅。当然你也可能会遇到有些视图并没有NavigationBar(实际上是隐藏了),然后从这样的视图中push一个有NavigationBar的视图,这种需求很常见(姑且不讨论这种设计到底合不合适),实现起来也很简单,就是在不同的视图里对NavigationBar设置隐藏和显示就可以了,代码如下:

 - (void)viewWillAppear:(BOOL)animated {

     [super viewWillAppear:animated];

     self.navigationController.navigationBarHidden = YES;

 }

  这里需要注意一点,因为设置NavigationBar的隐藏或显示是作用到当前navigationcontroller的,他会影响到整个navigationcontroller的NavigationBar的显示情况,所以一定要放到viewWillAppear里,不能放到viewDidLoad里。
  看下效果:

  

  

  嗯,好像还不错。等等,pop的时候好像右上角有个黑色的东东,那是什么鬼?用iOS7系统自带的右滑返回功能仔细看看(手指按住不松开可以慢慢移动看看效果):

  

  

  哦,shit!告诉我这不是真的!但这就是真的!接受现实吧,骚年!
  心中一万只草泥马奔腾过后,开始寻找解决办法。
  开始以为是NavigationBar透明度的问题,试了好几个方案没有解决。
  最后无意中找到解决办法,然后差点哭晕在厕所,代码如下:

 - (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated]; // self.navigationController.navigationBarHidden = YES;
[self.navigationController setNavigationBarHidden:YES animated:YES];
}

  再看下现在的效果:

嗯,不错!很有丝滑的感觉,嘿嘿!

总结一下,问题的关键在于那个animated,必须是YES才能达到理想的效果,如果换成下面的代码[self.navigationController setNavigationBarHidden:YES animated:NO],依然会有黑色底。定位到这个方法里看到这么一句话:
If animated, it will transition vertically using UINavigationControllerHideShowBarDuration.
大致意思是如果animated=YES,会使用UINavigationControllerHideShowBarDuration进行垂直过渡。UINavigationControllerHideShowBarDuration是一个CGFloat类型的常量。
可是我并没有很好的理解它所谓的transition vertically到底是个什么概念,也许就是后来看到的那个效果吧。。。

(文笔不好,如有错误,欢迎指正,不甚感激)

 
 
 

无NavigationBar到有NavigationBar视图切换时的一个坑的更多相关文章

  1. 关于pyinstaller打包程序时设置icon时的一个坑

    关于pyinstaller打包程序时设置icon时的一个坑     之前在用pyinstaller打包程序的时候遇到了关于设置图标的一点小问题,无论在后面加--icon 或是-i都出现报错.查了下st ...

  2. WSL Ubuntu 安装MongoDb 4.0导入公钥时遇到一个坑 (转)

    WSL Ubuntu 安装MongoDb 4.0导入公钥时遇到一个坑 一路坑啊~~~网上的密钥都不对????  不应该啊 源中默认是MongoDb 3.x 但是我想用4.0,然后按照mongodb官方 ...

  3. Nginx 转发时的一个坑,运维居然让我背锅!!

    最近遇到一个 Nginx 转发的坑,一个请求转发到 Tomcat 时发现有几个 http header 始终获取不到,导致线上出现 bug,运维说不是他的问题,这个锅我背了. 新增的几个 header ...

  4. 隐藏NavigationBar时的一个坑

    http://www.jianshu.com/p/efb960fed457 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear: ...

  5. 2016年1月7日 隐藏NavigationBar时的一个坑

    http://www.jianshu.com/p/efb960fed457 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear: ...

  6. 【Qt】无边框窗体中带有ActiveX组件时的一个BUG

    无意中发现的一个BUG,Qt5.1.1正式版首先创建一个GUI工程,拖入一个QAxWidget控件(为了使ActiveX生效,需要在.pro文件中加入CONFIG += qaxcontainer)接着 ...

  7. <jsp:param>标签给属性赋值时的一个坑

    http://blog.sina.cn/dpool/blog/s/blog_58c5066001011gdn.html 因为: <jsp:forward和<jsp:param在被编译成ja ...

  8. Java中对象JSON格式化处理时的一个坑

    在项目中遇到了一个JSON的坑.记录下. 直接上代码: import java.util.ArrayList; import com.alibaba.fastjson.JSON; public cla ...

  9. 访问进程环境变量environ时的一个坑

    在unistd.h中定义了变量char **environ;来表示当前所有环境变量,一般来说访问特定环境变量可以用getenv,但是想遍历所有环境变量就得使用environ. 即在程序内全局声明ext ...

随机推荐

  1. html-文本处理

    文本处理-相关操作: <!-- 申明为html5版本 --> <!DOCTYPE html> <html> <head> <title>文本 ...

  2. CCNA2.0笔记_ipv6的EIGRP

    IPv6的eigrp特征: 邻居发现 增量更新 快速收敛 负载均衡 三个表 -邻居表 -拓扑表 -路由表 配置ipv6的eigrp Router(config)#ipv6 unicast-routin ...

  3. 跟着百度学PHP[14]-PDO-优化驱动

    使用方法设置预定义变量 PDO的方法/属性 PDO::beginTransaction — Initiates a transaction PDO::commit — Commits a transa ...

  4. 1 App Components - App组件

    Android应用框架可以让你使用一系列可重用的组件来创建极其丰富和新颖的应用.本节说明了Android应用如何工作,如何使用组件来创建应用. Managing the Activity Lifecy ...

  5. socket编程头文件分析

    在socket网络编程中经常用到一些宏定义.结构和函数,这些经常包含在相关的头文件中,使用时直接include相关头文件即可.下面简单描述下相关的一些结构及头文件. 1. sockaddr  / bi ...

  6. 基于quick-cocos2d-x的LuaSocket范例

    这是一个 luasocket 范例. 为了便于使用,我封装了 luasocket 到 cc.net.SocketTCP 类中.这个范例展示如何使用 cc.net.SocketTCP . 同时,在本范例 ...

  7. 磁盘 & 文件系统

    1. dumpe2fs –h /dev/sda1 查询整个磁盘情况( 其中后边的设备名可以换 ) 2. df –h , du –h 查询磁盘容量情况 3. 实体链接和符号链接 实体链接: ln mk. ...

  8. shellscript

    shell script 运行方法 -------------------------------------- 1. 以命令方式执行( 一般是以这种方式执行 ) 首先修改档案权限可以运行 chmod ...

  9. CI和CD的意思

    openstack中CI和CD的意思: 持续集成(CI)和持续交付(CD)

  10. c# @符号后面对 双引号转义

    本文讲述c#中如何转义双引号. c#中转义双引号",使用的转义字符仍然是\. string str = "\"www.itjsxx.com\""; 但 ...