有這樣一種情況鹉勒。做開發(fā)的時(shí)候有一種需求,就是導(dǎo)航欄的顏色是固定黑色或白色珍逸。大家都會(huì)做統(tǒng)一設(shè)置逐虚,但是有一種需求是導(dǎo)航欄默認(rèn)是白色但是某一個(gè)頁(yè)面需要黑色,你們會(huì)怎么做呢谆膳?看完這篇文章你就懂了
typedef NS_ENUM(NSInteger, UIStatusBarStyle) {
UIStatusBarStyleDefault
UIStatusBarStyleLightContent
}
作用:
切換狀態(tài)欄風(fēng)格叭爱,目前只有黑白兩種(廢話。漱病。)
問題: 誰(shuí)可以來(lái)切換买雾? 如何切換?
先說(shuō)一下都可以由哪些角色切換狀態(tài)吧杨帽。
1漓穿、UIApplication
2、UINavigationController
3睦尽、UIViewController
什么時(shí)候由誰(shuí)來(lái)管理呢?這里我們要考慮以下幾種情況:
一型雳、info.plist 設(shè)置 View controller-based status bar style appearance = NO当凡;
二山害、有導(dǎo)航控制器
先來(lái)討論簡(jiǎn)單的:
View controller-based status bar style appearance = NO
其實(shí)就是把狀態(tài)欄的控制權(quán)交由 UIApplication 這個(gè)類,這個(gè)時(shí)候只由它來(lái)統(tǒng)一管理沿量。
代碼:
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent
so easy@嘶拧!朴则!
再來(lái)討論有導(dǎo)航控制器的情況:
首先权纤,肯定是設(shè)置 View controller-based status bar style appearance = YES,這樣就把控制權(quán)交由視圖控制器了乌妒。
那到底是交給 UINavigationController 還是 UIViewController呢汹想? 其實(shí)也很簡(jiǎn)單, 有導(dǎo)航控制器的情況就交給 UINavigationController撤蚊, 沒有則由 UIViewController 來(lái)管理古掏。代碼 :
有導(dǎo)航控制器,在 UINavigationController 內(nèi)添加方法
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
沒有導(dǎo)航控制器侦啸,則把以上代碼在 UIViewController 內(nèi)槽唾。
那還有一種情況,就是導(dǎo)航控制器但是又想讓 UIViewController 來(lái)管理光涂,怎么辦呢庞萍?其實(shí)UINavigationController有一個(gè)方法可以把狀態(tài)欄的控制器交給UIViewController就是:
- (UIViewController *)childViewControllerForStatusBarStyle
{
return self.visibleViewController;
}
這樣,即使有導(dǎo)航控制器忘闻,也可以讓UIViewController來(lái)管理啦6奂啤!