iOS之隐藏状态栏

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

[cpp] view plain copy

  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一下发现现在的解决方法有两种:

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

[cpp] view plain copy

  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.

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

[cpp] view plain copy

  1. [self setNeedsStatusBarAppearanceUpdate];

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

[cpp] view plain copy

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

或者调用下面的代码:

[cpp] view plain copy

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

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

[cpp] view plain copy

    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. }
时间: 2024-10-24 09:31:44

iOS之隐藏状态栏的相关文章

iOS开发- 隐藏状态栏(电池栏)

分为两种情况: 1. 想要隐藏某个视图的状态栏, 比方说, 从界面A, push 到界面B的时候, 界面A原本显示状态栏, 然而我们须要界面B不显示状态栏. 这时候, 能够这样做: 在B中实现: - (void)viewDidLoad { [super viewDidLoad]; if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) { // iOS 7 [self prefersStatusBar

iOS 应用隐藏状态栏

有时候在 Storyboard 和 target 里的设定并不足以使得应用能够完全隐藏状态栏. 这时候需要到 Info.plist,添加一项:View controller-based status bar appearance,并把值设为 NO.

iOS如何隐藏状态栏,包括网络标志、时间标志、电池标志等

我们在开发App的时候,在遇到有状态栏时,NavigationBar上面的按钮,是极难点击的,所以这个时候,最好我们能够人为的隐藏掉状态栏. 如果一直需要隐藏的话,直接在info.plist里面,添加Key值:View controller-based status bar appearance 如果没有的话,步骤如下: 1.在任意一个位置点击+号,即可进行添加: 2.选择:View controller-based status bar appearance这一项,所有的属性,是按照ABC的排

在iOS中隐藏状态栏

在Info.plist加入 View controller-based status bar appearance 并设置为NO; 在代码中调用[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];

iOS隐藏状态栏

有时候,要求在程序启动的过程中隐藏状态栏,勾上上面即可. #pragma mark - 在启动入口 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { application.statusBarHidden = NO; } 就这么简单.

iOS 隐藏状态栏

当系统版本号高于iOS7.0,那么原来的隐藏状态栏方式就可能不好使了. 因为你要是用修改plist的方法实现的隐藏方法,还是管用的. plist方法: key:Status bar is initially hidden    value : YES   自从开启程序,状态栏就被隐藏了 key:View controller-based status bar appearance  value : YES   进入程序后,状态栏被隐藏.(也就是欢迎画面 Default.png 时候显示状态栏)

iOS开发之状态栏隐藏(问题篇)

一.基本应用 相信基本的隐藏办法网上很多,这里只简单说明一下 1??改变全局状态栏 1.在项目的Info.plist文件里设置UIViewControllerBasedStatusBarAppearance为NO.即更改为StatusBar的状态不随UIViewController的不同而不同 2.[[UIApplication sharedApplication]setStatusBarHidden:YES]; 2??交由控制器管理 1.在项目的Info.plist文件里设置UIViewCon

如何在iOS 7.0中隐藏状态栏

使用Cordova做了一个小项目,在原来iOS6的时候显示挺好,升级为iOS7后,每次App启动后都会显示状态栏,而且状态栏和App的标题栏重叠在一起,非常难看,因此需要将状态栏隐藏起来. 首先,考虑了采用Code的方式,在MainViewControoler.m中写下如下代码: 但是测试并不生效. 于是尝试修改Info.plist文件,因为每个工程Info.plist的位置可能不尽相同,最好在底部的搜索框中进行搜索.添加了下面两个属性后,在启动App,状态栏隐藏了. 参考资料: 1.iOS7

IOS 程序中状态栏的显示与隐藏

项目中有时需要将顶部的状态栏给隐藏掉,在网上搜了搜基本上都不能用,原因大概是当程序运行的时候状态栏已经显示出来,然后再调状态栏的set方法会不起作用(至于为什么不起作用还不清楚). 隐藏状态栏方法1: 修改plist文件,添加 Status bar is initially hidden  当设置成为YES时,程序启动的时候就隐藏了(启动页也不显示) 添加View controller-based status bar appearance   设置为NO 这种修改方法会隐藏整个项目中的状态栏(