iOS UI 任意变更StatusBar背景颜色

任意变更StatusBar背景颜色

iOS 7问世之后,改变iOS整个UI设计,在画面呈现上面也变的不同,尤其是StatusBar背景颜色会随着您APP背景颜色所改变,言下之意也能理解成StatusBar由文字所表达,您可以籍由setStatusBarStyle指定是黑色字UIStatusBarStyleDefault或是白色字UIStatusBarStyleLightContent,但你想要维持原本的黑底色或其他底色而不被APP背景所影响时该怎么处理?接下来会告诉您怎么做,但要记得这只会在iOS 7以后本版才有效用。

变更Xcode Info设定

如果您要使用暗色系当背景底色时,可能您会选择白色字的StatusBar文字,那您需要变更StatusBarStyle设定,因后期与前期Xcode设定方式不同,要可容以前的做法时,需要在Info.plist中增加设定让Xcode在编译时能接受旧语法:

首先在Info资讯中Custom Ios Target Properties建立新的Key值View controller-based status bar appearance并将Value值选择NO,如此一来就能接受用程式来设定物件全域性的设定,像[UIApplication sharedApplication],或是改变预设值,让每个StoryBoard的StatusBar预设值是一样的:

增加程式码

iOS APP启动时会利用AppDelegate来完成一些相关初始化动作,建立一个Windows后再载入ViewController让使用者看到第一个画面,不过一些细节已经被隐藏,在早些版本的Xcode还能看到一些原理,不过每当初始化完成要开始Load第一个ViewController时会先呼叫didFinishLaunchingWithOptions,所以将要处理的程式码写在这。

//-----------start-----------
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    //设定StatusBarStyle为白色文字表示
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.window.frame.size.width,20)];
    label.backgroundColor = [UIColor blackColor];
    //建立一个Label并且为全黑底色,高度20px,宽度与整个window同宽
    [self.window.rootViewController.view addSubview:label];
    self.window.backgroundColor = [UIColor blackColor];
    return YES;
}
//------------end------------

原理

iOS 7在完成每一个画面时是以图层(Layer)概念一层一层堆叠让使用者看到最终的画面,以StatusBar情况下,它会被以文字的方式叠在View Controller画面最上一层,所以当didFinishLaunchingWithOptions被呼叫时加入一个Label View让它在能保持之后被载入的View Controller的上层,如此原理就能让StatusBar的背景以你先加入的Label的背景为主。

当你增加Navigation功能时也能因为这样的方式可以让StatusBar保持自已的底色: