UI 界面

设置状态栏的背景色及前景色(iOS)

2018-11-10  本文已影响61人  百事星空

知识普及:

iOS上,状态栏就是指的最上面的20像素高的部分
背景色:默认透明色;
前景色:就是指的显示电池、时间等部分,默认黑色;
如下图,背景色为黑色,前景色为白色


状态栏.png

一、设置背景色

默认情况下状态栏的背景色是透明的(苹果推荐),我们看到其实导航栏的背景色,如果非要改状态栏背景色的话也是有办法的:

//设置状态栏背景色
- (void)setStatusBarBackgroundColor:(UIColor *)color {
    UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
    NSLog(@"statusBar.backgroundColor--->%@",statusBar.backgroundColor);
    if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
        statusBar.backgroundColor = color;
    }
}
背景色改成红色了.png

二、设置前景色(两类办法)

(1)在plist文件中,把View controller-based status bar appearance设置为NO。然后写如下代码:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
或
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

(2)在plist文件中,把View controller-based status bar appearance设置为YES。然后写如下代码:

    //plist中 View controller-based status bar appearance 设为YES 才有用
    // 状态栏文字黑色 UIBarStyleDefault
    // 状态栏文字白色 UIBarStyleBlack
    [self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];

//在需要的控制器里面重写这个方法
- (UIStatusBarStyle)preferredStatusBarStyle{
    //黑色:UIStatusBarStyleDefault
    return UIStatusBarStyleLightContent;//白色  
}
ps:

运行会发现这个方法根本没被调用,因为系统会调用container(容器控制器)的preferredStatusBarStyle这个方法(app.window.rootViewController的preferred的方法,一般我们用UINavigationController或者UITabBarController来做container),也就是根本不会调用子控制器(我们所看到的UIViewcontroller)的preferredStatusBarStyle方法。这个时候- (UIViewController *)childViewControllerForStatusBarStyle:就派上用场了。

写一个UINavigationController的类别 .m如下:

#import "UINavigationController+CY.h"

@implementation UINavigationController (CY)
-(UIViewController *)childViewControllerForStatusBarStyle{
    //当前显示的控制器
//    return self.topViewController;
    //是某个导航栈的栈顶视图
    return self.visibleViewController;
}
-(UIViewController *)childViewControllerForStatusBarHidden{
    return self.visibleViewController;
}
@end

这下再运行发现就好了。

ps:

该类扩展的意思就是,我重写了,你不要调用Container(NavigationController或者UITabBarController)的preferredStatusBarStyle这个方法了,去调用self.visibleViewController的preferredStatusBarStyle,那么,我们写在UIViewcontroller里面的方法就会被调用了,就能更改StatusBar的前景颜色了。
参考:https://www.cnblogs.com/ilovelqq/p/4769655.html

上一篇下一篇

猜你喜欢

热点阅读