无NavigationBar到有NavigationBar视图切换时的一个坑

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

1 - (void)viewWillAppear:(BOOL)animated {
2
3     [super viewWillAppear:animated];
4
5     self.navigationController.navigationBarHidden = YES;
6
7 }

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

  

  

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

  

  

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

1 - (void)viewWillAppear:(BOOL)animated {
2     [super viewWillAppear:animated];
3
4 //    self.navigationController.navigationBarHidden = YES;
5     [self.navigationController setNavigationBarHidden:YES animated:YES];
6 }

  再看下现在的效果:

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

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

转自:http://www.cnblogs.com/manji/p/4810444.html

时间: 2024-08-25 00:07:22

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

Windows下Java File对象创建文件夹时的一个"坑"

import java.io.File; import java.io.IOException; public class DirCreate { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub String dirStr="D:"; File dir=new File(dirStr); System.out.println("====

隐藏NavigationBar时的一个坑

http://www.jianshu.com/p/efb960fed457 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.navigationController.navigationBarHidden = YES; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; self.

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

无意中发现的一个BUG,Qt5.1.1正式版首先创建一个GUI工程,拖入一个QAxWidget控件(为了使ActiveX生效,需要在.pro文件中加入CONFIG += qaxcontainer)接着,为了让ActiveX有效,需要引入一个组件,我这里引入的是IE组件 [cpp] view plain copy MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->s

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

在unistd.h中定义了变量char **environ;来表示当前所有环境变量,一般来说访问特定环境变量可以用getenv,但是想遍历所有环境变量就得使用environ. 即在程序内全局声明extern char **environ;当然设定main函数第3个参数也可以,不过不推荐,因为ISO C的main函数没有第三个参数. environ维护了一个char*数组,每个元素都是一个指针指向函数栈帧顶部的环境变量,数组结尾是NULL. 于是正确的遍历姿势是下面这样 for (int i =

ovirt4.3管理kvm平台添加node时的一个坑

WARN [org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector] (EE-ManagedThreadFactory-engineScheduled-Thread-86) [101c2131] EVENT_ID: VDS_CPU_LOWER_THAN_CLUSTER(515), Host ***** moved to Non-Operational state as host does not meet the

android studio中配置X5 webview时的一个坑

在接入X5的第二步中,需要配置so文件,这里说一下遇到的坑 1. 需要把demo下载回来,不然你找不到so文件,找到so文件后放到自己相对应的目录下边,自己里面那个目录也没有,所以和文件夹一起复制过去吧. 2. 打开对应module中的build.gradle文件,在文件的android{}中的defaultConfig{}里(如果没有defaultConfig{}则手动添加)添加如下配置: ndk{abiFilters "armeabi"},如果你只写ndk{abiFilters &

Android中Activity切换时共享视图元素的切换动画(4.x兼容方案)

同时发布在我的博客 点此进入 开始 上一篇讲了使用 Google 的 AppCompat-v7 来实现 Activity 切换时实现共享视图元素的切换动画.这一篇介绍两个可以兼容 4.x 的两个第三方方案. 上一篇:Android中Activity切换时共享视图元素的切换动画(5.0以上) 方案一:PreLollipopTransition 首先在 build.gradle 配置文件添加这个库依赖 dependencies { compile 'com.kogitune:pre-lollipop

iOS开发系列--视图切换

概述 在iOS开发中视图的切换是很频繁的,独立的视图应用在实际开发过程中并不常见,除非你的应用足够简单.在iOS开发中常用的视图切换有三种,今天我们将一一介绍: UITabBarController UINavigationController 模态窗口 UITabBarController iOS三种视图切换的原理各不相同: UITabBarController:以平行的方式管理视图,各个视图之间往往关系并不大,每个加入到UITabBarController的视图都会进行初始化即使当前不显示在

ios 视图切换翻页效果

本文写的是视图切换,涉及到的内容有 1.实现代码添加Navigation Bar  Toolbal: 2.实现在Navigation Bar和Toolbar上用代码添加Bar Button Item: 3.UIView层面的简单动画效果 先把实现结果功能截图贴出来,对应动画效果 开始界面 和第一次向上翻页 向上翻页 和向下翻页 从左向右翻页 和从右向左翻页 开始制作: 1.创建一个新工程叫NVDemo: File->New->Project ->single View Applicati