我們?cè)趇OS開發(fā)的時(shí)候,經(jīng)常會(huì)遇到需要修改狀態(tài)欄的情況。一般來說,如果我們使用了NavigationController,直接設(shè)置導(dǎo)航欄的barTintColor是可以連帶將statusBar的背景色也調(diào)整成和NavigationBar一樣的顏色。但是如果我們想要單獨(dú)管控statusBar的顏色呢?下面我們來介紹一些修改statusBar的一些方法。
1、和狀態(tài)欄連帶調(diào)整。
這就是我上面說到的,在有導(dǎo)航欄,并且你希望你的導(dǎo)航欄和狀態(tài)欄顏色一致的情況下使用,簡(jiǎn)單方便。代碼如下:
self.navigationController.navigationBar.barTintColor = [UIColor greenColor];
2、在NavigationBar上面添加View遮罩層來控制statusBar的背景色。
這種方式看起來不太科學(xué),但是用起來卻十分好用,如果你希望你的狀態(tài)了和導(dǎo)航欄的顏色可以分開控制,這種方式是值得一用的。
代碼如下:
UIView *stateView = [[UIView alloc] initWithFrame:CGRectMake(0, -20, SCREEN_WIDTH, 20)];
[self.navigationController.navigationBar addSubview:stateView];
stateView.backgroundColor = [UIColor blackColor];
這里其實(shí)是把用于遮罩的View添加到了NavigationBar上面,所以當(dāng)導(dǎo)航欄隱藏的時(shí)候,會(huì)感覺狀態(tài)欄也一起被隱藏了。其實(shí)我們并沒有真正改變statusBar的背景色,只是一個(gè)遮罩層罷了。但是這也能滿足大部分的需求了。
3、通過KVC取出statusBar再調(diào)整其背景色。
這種方法看起來是最符合OC的規(guī)范的,使用到了KVC,是直接將系統(tǒng)的statusBar屬性進(jìn)行修改,所以就算沒有導(dǎo)航欄,也是可以修改的。代碼如下:
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
statusBar.backgroundColor = color;
}
當(dāng)然這也有一些弊端,如果我們?cè)诖a中進(jìn)行了這種修改,那么整個(gè)APP的狀態(tài)欄都會(huì)改變成我們?cè)O(shè)置的顏色,所以如果在某個(gè)頁面需要不同的狀態(tài)了顏色,我們還需要再設(shè)置一下。
以上是修改狀態(tài)欄目的三種方法。如有不正確的地方,請(qǐng)指正。謝謝。