任意變更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保持自已的底色: