无NavigationBar到有NavigationBar视图切换时的一个坑
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视图切换时的一个坑的更多相关文章
- 关于pyinstaller打包程序时设置icon时的一个坑
关于pyinstaller打包程序时设置icon时的一个坑 之前在用pyinstaller打包程序的时候遇到了关于设置图标的一点小问题,无论在后面加--icon 或是-i都出现报错.查了下st ...
- WSL Ubuntu 安装MongoDb 4.0导入公钥时遇到一个坑 (转)
WSL Ubuntu 安装MongoDb 4.0导入公钥时遇到一个坑 一路坑啊~~~网上的密钥都不对???? 不应该啊 源中默认是MongoDb 3.x 但是我想用4.0,然后按照mongodb官方 ...
- Nginx 转发时的一个坑,运维居然让我背锅!!
最近遇到一个 Nginx 转发的坑,一个请求转发到 Tomcat 时发现有几个 http header 始终获取不到,导致线上出现 bug,运维说不是他的问题,这个锅我背了. 新增的几个 header ...
- 隐藏NavigationBar时的一个坑
http://www.jianshu.com/p/efb960fed457 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear: ...
- 2016年1月7日 隐藏NavigationBar时的一个坑
http://www.jianshu.com/p/efb960fed457 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear: ...
- 【Qt】无边框窗体中带有ActiveX组件时的一个BUG
无意中发现的一个BUG,Qt5.1.1正式版首先创建一个GUI工程,拖入一个QAxWidget控件(为了使ActiveX生效,需要在.pro文件中加入CONFIG += qaxcontainer)接着 ...
- <jsp:param>标签给属性赋值时的一个坑
http://blog.sina.cn/dpool/blog/s/blog_58c5066001011gdn.html 因为: <jsp:forward和<jsp:param在被编译成ja ...
- Java中对象JSON格式化处理时的一个坑
在项目中遇到了一个JSON的坑.记录下. 直接上代码: import java.util.ArrayList; import com.alibaba.fastjson.JSON; public cla ...
- 访问进程环境变量environ时的一个坑
在unistd.h中定义了变量char **environ;来表示当前所有环境变量,一般来说访问特定环境变量可以用getenv,但是想遍历所有环境变量就得使用environ. 即在程序内全局声明ext ...
随机推荐
- atom执行num run dev报错
# atom运行npm run dev报错问题 运行描述 vue项目,直接在终端中运行 npm run dev 可以成功执行.但是在atom安装的platformio-ide-terminal插件中打 ...
- [svc]msmtp+mutt发附件,发邮件给多个人
环境:centos6.7 x86-64 内网有web服务器(curl可展示目录) #预安装软件 yum install lrzsz ntpdate sysstat dos2unix wget teln ...
- Unix删除当前目录可执行文件
On GNU versions of find you can use -executable: find . -type f -executable -printFor BSD versions o ...
- C#多线程方法同步
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 阿里大鱼短信接口(Python3版)
近期由于须要用到短信接口,选型的的结果是用阿里大鱼的短信服务,然而淘宝开放平台(TOP)的SDK已经非常多年没有更新了.不支持python3.自己动手改了半天,还是不太正常,索性不用它,自己写一个算了 ...
- maven依赖workspace和jar包
当开发maven项目时,如果workspace中有maven依赖的项目,并且groupid和artifactId都相同,maven就会优先依赖workspace中的项目文件,如果想依赖maven库中的 ...
- sql命令大全
1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...
- 在Linux系统上查看Apache服务器的错误日志
错误日志和访问日志文件为系统管理员提供了有用的信息,比如,为 Web 服务器排障,保护系统不受各种各样的恶意活动侵犯,或者只是进行各种各样的分析以监控 HTTP 服务器.根据你 Web 服务器配置的不 ...
- Alluxio部署(集群模式)
下载(pre-build for Hadoop 2.7) http://www.alluxio.org/download` 解压 tar -xvf alluxio-1.3.0-hadoop2.7-bi ...
- markdown完整语法规范3.0+编辑工具介绍
以下每一种,我都会挑选最常用的一种写法,一切表述只追求简明扼要.想深究,请查看文末链接. 通用写法:符号+空格+内容 1 引用: 单层引用: > 一级引用 多层引用:内层符号前的空格必须要 &g ...