更改ios状态栏颜色

更改状态栏颜色

将iOS状态栏默认颜色为黑色,但有时为了需求,我们需要更改状态栏的颜色,常用的方式有:

方法一:

  1.在info.plist添加View controller-based status bar appearance为NO;

  2.在页面执行[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]。

  但是这种做法在ios9.0以前是完全没有问题的,进入iOS9.0后,便会出现如下警告:

<Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE en

   为了消除这条警告:修改方式如下:

1.在info.plist删掉这条也可以,或者将View controller-based status bar appearance设置为YES

2.在需要改变颜色的页面增加:(非全局,需要在每个需要的Viewcontroller中加入)

-(UIStatusBarStyle)preferredStatusBarStyle    
{    
    return UIStatusBarStyleLightContent;    
} 

但是问题又来了,如果我们初始化一个UINavigationController或者UITabBarController作为RootViewcontroller,那么在子viewController中设置的上诉解决方案就会失效,该怎么办呢?

为UINavigationController扩展一个category,在类别里面实现如下方法,并通过UINavigationController调用该方法,那么在viewController中就可以实现状态栏颜色的改变了

-(UIViewController *)childViewControllerForStatusBarStyle
{
    return self.topViewController;
}

在状态栏发生改变时需要调用这个方法:

[self setNeedsStatusBarAppearanceUpdate];

设置状态栏的动画效果:

-(UIStatusBarAnimation)preferredStatusBarUpdateAnimation{
   
//    return UIStatusBarAnimationFade;
    return UIStatusBarAnimationSlide;
}

 

隐藏状态栏:

如果不设置UINavigationController等,有两种方式隐藏状态栏

方法一:

    1.将info.plist添加View controller-based status bar appearance为NO;

    2.将info.plist添加Status bar is initially hidden为 YES。

方法二:(非全局)

-(BOOL)prefersStatusBarHidden{
    return YES;
}

如果初始化一个UINavigationController或者UITabBarController作为RootViewcontroller,那么第二种方法就失效了,解决办法同更改状态栏颜色。

 

在某一个界面中隐藏状态栏的方法:

1.在 info.plist添加View controller-based status bar appearance为NO;

2.在需要隐藏的页面:

页面将要出现时:

-(void)viewWillAppear:(BOOL)animated
{
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];  
}

在页面消失的地方:

-(void)viewWillDisappear:(BOOL)animated
{
    [[UIApplication sharedApplication] setStatusBarHidden:No withAnimation:UIStatusBarAnimationFade];
}

 

 

posted @ 2015-11-01 22:16  墨VS雪  阅读(567)  评论(0编辑  收藏  举报