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