转:http://blog.csdn.net/dqjyong/article/details/17896145

评:通过这点变化,可以看出苹果倾向于使用delegate取代全局变量。

IOS7中,不仅应用的风格有一定的变化,状态栏变化比较大,我们可以看到UIVIEWCONTROLLER的状态栏与导航栏基本是一体的。因此UIVIEWCONTROLLER的HIDE/SHOW状态的方法也跟其他版本的不一样了。 在IOS7以前的版本,HIDE/SHOW是通过以下代码实现

  1. [[UIApplication sharedApplication] setStatusBarHidden:YES(NO) withAnimation:UIStatusBarAnimationSlide];

在iOS7中默认情况下,这个方法不成功了。到setStatusBarHidden:withAnimation:声明的头文件去看看,多了一句注释: // Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system. 现在在iOS7中,status bar的外观默认依赖UIViewController, 也就是说status bar随UIViewController的不同而不同。在这种默认的方式下,用全局的方法setStatusBarHidden:withAnimation:是行不通的。

google一下发现现在的解决方法有两种:

如果只是单纯的隐藏状态栏,那么是在默认情况下,只需要重新实现两个新方法

  1. - (UIStatusBarStyle)preferredStatusBarStyle
  2. {
  3. return UIStatusBarStyleLightContent;
  4. //UIStatusBarStyleDefault = 0 黑色文字,浅色背景时使用
  5. //UIStatusBarStyleLightContent = 1 白色文字,深色背景时使用
  6. }
  7. - (BOOL)prefersStatusBarHidden
  8. {
  9. return NO; //返回NO表示要显示,返回YES将hiden
  10. }

上面一个回调方法返回status bar显示时候的样式,下面一个回调控制是否显示status bar.

调用下面的一行代码将会触发上面的回调

  1. [self setNeedsStatusBarAppearanceUpdate];

如果想在hiden/show之间有点动画效果,用下面的代码即可:

  1. [UIView animateWithDuration:0.5 animations:^{
  2. [self setNeedsStatusBarAppearanceUpdate];
  3. }];

或者调用下面的代码:

  1. [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];

还有一种方法是在infor.plist中加入key:UIViewControllerBasedStatusBarAppearance 并设置其值为NO,这样就告诉系统,status bar不依赖于UIViewController. 这样就可以通过上面的方法来hiden status bar.

在设置好这些,我们还是会发现一些问题,就是状态栏虽然没有了,但取而代之的是黑色的一片区域,所以我们还需要调整UIViewController的视图,具体代码为:

  1. -(void)viewDidLayoutSubviews
  2. {
  3. CGRect viewBounds = self.view.bounds;
  4. CGFloat topBarOffset = 20.0;
  5. viewBounds.origin.y = -topBarOffset;
  6. self.view.bounds = viewBounds;
  7. [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];//for status bar style
  8. }

iOS7隐藏状态栏 statusBar的更多相关文章

  1. iOS7隐藏状态栏 status Bar

    转自:http://blog.csdn.net/dqjyong/article/details/17896145 IOS7中,不仅应用的风格有一定的变化,状态栏变化比较大,我们可以看到UIVIEWCO ...

  2. IOS7 隐藏状态栏 (电池栏)

    电池状态栏. //方法一(代码设置): 现在ios7已经更改为透明,并且不占用屏幕高度.其中隐藏及显示的方法如下: 在uiviewcontroller的子类下,调用:     if ([self re ...

  3. iOS7 隐藏状态栏 hide statusBar

    1.调用 [self setNeedsStatusBarAppearanceUpdate]; 2.重载以下函数 - (BOOL)prefersStatusBarHidden{ return _hide ...

  4. IOS7 隐藏状态栏

    - (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } // - (BOOL)pref ...

  5. [置顶] IOS7状态栏StatusBar官方标准适配方法

    IOS7状态栏StatusBar官方标准适配方法 hello,大家好,ios7正式版已经发布,相信大家都在以各种方式来适配ios7. 如果你已经下载了xcode5,正准备使用,你会发现各种布局的改变. ...

  6. ios7学习之路六(隐藏状态栏 )

    方法一(代码设置): 现在ios7已经更改为透明,并且不占用屏幕高度.其中隐藏及显示的方法如下: 在uiviewcontroller的子类下,调用:      if ([self respondsTo ...

  7. iOS7 Xcode 5如何设置隐藏状态栏

    转自:http://www.cocoachina.com/ask/questions/show/99658 最简单直接的方法: 直接在RootViewController.mm里面(Cocos2d-x ...

  8. IOS7状态栏StatusBar官方标准适配方法

    IOS7状态栏StatusBar官方标准适配方法 hello,大家好,ios7正式版已经发布,相信大家都在以各种方式来适配ios7. 如果你已经下载了xcode5,正准备使用,你会发现各种布局的改变. ...

  9. 隐藏状态栏后tableview自动上移20个像素的问题

    最近在开发过程中碰到一个很奇怪的问题,将状态栏隐藏掉之后,页面上的tableView会自动上移20个像素. 这是因为在iOS7.0之后,系统会自动调整scrollView的layout 和 conte ...

随机推荐

  1. const限定符

    1 const的作用 便于进行类型检查.可以保护被修饰的东西.避免不必要的内存分配.为函数重载提供一个参考. 2 const成员函数 const成员函数只能访问数据成员的值,而不能修改他. #incl ...

  2. mac下sublime text3安装SFTP及使用

    mac下sublime text3安装SFTP 1.shift+command+p进入控制面板 2.输入install进入程序安装界面选择需要安装的插件(SFTP) 3.直接进行安装(需要联网) 4. ...

  3. Git克隆

    用法1:Git clone <repository> <directory> 将<repository>指向的版本库创建一个克隆到<directory> ...

  4. MongoDB数据库简介及安装

    一.MongoDB数据库简介 简介 MongoDB是一个高性能,开源,无模式的,基于分布式文件存储的文档型数据库,由C++语言编写,其名称来源取自"humongous",是一种开源 ...

  5. __slots__ 属性绑定

    s = Student() # 创建新的实例 s.name = 'Michael' # 绑定属性'name' s.age = 25 # 绑定属性'age' s.score = 99 # 绑定属性'sc ...

  6. FreeBSD_11-系统管理——{Part_2-核心}

    一.Managing Services in FreeBSD Service restart will only work if it is set to YES in /etc/rc.conf. T ...

  7. C# 基础(5)--字符串

    Params 可变参数,只能修饰数组,可以传递数组,也可以传递数组的元素. 要抛弃一个异常,可以这样写: Throe new exeception?? 命名空间 不在同一个命名空间下的类,不同直接访问 ...

  8. String的两种生成方式

    String的两种生成方式 第一种是双引号法,效率更高 java为String类提供了缓冲池机制,当使用双引号定义对象时,java环境首先去字符串缓冲池寻找相同内容的字符串,如果存在就直接拿出来应用, ...

  9. ORA-24550错误

    [oracle@app-148-39 oracledata]$ sqluldr2_linux64_10204.bin USER=xxx/xxx@xxx:1521 charset=AL32UTF8 QU ...

  10. 在Linux中让打印带颜色的字

    echo显示带颜色,需要使用参数-e 格式如下: echo -e "\033[字背景颜色;文字颜色m字符串\033[0m" 例如: echo -e "\033[41;37 ...