[iOS] UIStatusBarStyle修改狀態(tài)欄樣式

很多時候我們需要修改頁面的Statusbar的樣式,這里的樣式是固定的,系統(tǒng)僅提供了兩種:

typedef NS_ENUM(NSInteger, UIStatusBarStyle) {
    UIStatusBarStyleDefault                                     = 0, // Dark content, for use on light backgrounds
    UIStatusBarStyleLightContent     NS_ENUM_AVAILABLE_IOS(7_0) = 1, // Light content, for use on dark backgrounds
    
    UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1,
    UIStatusBarStyleBlackOpaque      NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2,
} __TVOS_PROHIBITED;

這里是對UIStatusBarStyle的枚舉,雖然有四個,但是后兩個是在iOS7.0之后廢棄的,使用的時候會有警告,所以,實際上只有兩種

UIStatusBarStyleLightContent
UIStatusBarStyleDefault

下面,我們就來看一看,怎么在項目中根據(jù)我們的需要進行選擇;
與狀態(tài)欄相關的方法主要有以下幾個:

- (UIStatusBarStyle)preferredStatusBarStyle NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; // Defaults to UIStatusBarStyleDefault
- (BOOL)prefersStatusBarHidden NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; // Defaults to NO
// Override to return the type of animation that should be used for status bar changes for this view controller. This currently only affects changes to prefersStatusBarHidden.
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; // Defaults to UIStatusBarAnimationFade

第一個是狀態(tài)欄的樣式,第二個是否隱藏狀態(tài)欄,第三個是動畫方式;

1. 不含有導航

如果工程中沒有使用導航,我們直接在ViewController中重寫上面的方法就可以修改狀態(tài)欄的樣式了:

- (UIStatusBarStyle)preferredStatusBarStyle {
    
    return UIStatusBarStyleLightContent;
}

這樣可以根據(jù)我們的需求在不同的頁面進行修改,隱藏,顯示狀態(tài)欄;
但是,當我們使用了導航后,好像沒效果了?

2. 含有導航

如果使用了導航,我們再去重寫上面的方法,就失去作用了,查了寫資料,發(fā)現(xiàn):

UINavigationController不會將 preferredStatusBarStyle方法調(diào)用轉給它的子視圖,而是由它自己管理狀態(tài),而且它也應該那樣做.因為UINavigationController 包含了它自己的狀態(tài)欄;
因此就算 UINavigationController中的viewController 實現(xiàn)了 preferredStatusBarStyle方法 也不會調(diào)用

那么,我們怎么在使用導航的時候修改status bar的狀態(tài)呢?

它是基于它的 UINavigationBar.barStyle屬性.默認(UIBarStyleDefault)的是黑色文本的狀態(tài)欄 而 UIBarStyleBlack是設置為白色文本的狀態(tài)欄;

也就是說,如果viewController是在導航中的,想要改變狀態(tài)欄文本顏色,那么需要通過代碼:

self.navigationController.navigationBar.barStyle = UIBarStyleBlack;//設置為白色
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;//設置為黑色

很多時候,我們雖然使用了導航,但是導航條都是我們自定義的,這個時候,我們隱藏了系統(tǒng)的導航:

self.navigationController.navigationBarHidden = YES;//隱藏系統(tǒng)導航

這時,我們就可以在ViewController里重寫preferredStatusBarStyle方法,來設置狀態(tài)欄的樣式了,方式同1;

PS:如果我們設置了不同頁面的狀態(tài)欄樣式,但是在進入到相應頁面時,狀態(tài)欄并沒有按我們的預期發(fā)生變化,可嘗試調(diào)用下面的方式試試:

- (void)setNeedsStatusBarAppearanceUpdate

3. 設置全局的狀態(tài)欄

如果我們想更改所有的狀態(tài)欄為同樣狀態(tài),可以在設置中進行修改:
在info.plist中添加如下字段:

<key>View controller-based status bar appearance<key>
<value>NO<value>

類型為Boolean,設置為NO;

設置為NO后,就不能使用代碼控制狀態(tài)欄的樣式了;如果想用代碼控制,就在這里設置為YES,當然,這樣在下面的設置就無效了


然后在項目的額General-->Deployment Info-->Status Bar Style中選擇需要的樣式:


這樣,項目中所有的狀態(tài)欄就都變?yōu)榘咨牧?

4. 總結

上面的第三種方法雖然使用簡單,但是不夠靈活,不能使用代碼在程序中動態(tài)調(diào)整狀態(tài)欄的設置,如果,APP中狀態(tài)欄統(tǒng)一,可以使用此方法,簡單,高效;如果狀態(tài)欄的設置需要動態(tài)調(diào)整,就只能在方法1,2中選擇了!!!

(完)

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笤闯,一起剝皮案震驚了整個濱河市衔憨,隨后出現(xiàn)的幾起案子流码,更是在濱河造成了極大的恐慌吼鱼,老刑警劉巖地来,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吧寺,死亡現(xiàn)場離奇詭異先蒋,居然都是意外死亡揩尸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門方面,熙熙樓的掌柜王于貴愁眉苦臉地迎上來放钦,“玉大人,你說我怎么就攤上這事恭金〔儋鳎” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵横腿,是天一觀的道長颓屑。 經(jīng)常有香客問我,道長耿焊,這世上最難降的妖魔是什么揪惦? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮罗侯,結果婚禮上器腋,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好纫塌,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布诊县。 她就那樣靜靜地躺著,像睡著了一般措左。 火紅的嫁衣襯著肌膚如雪依痊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天媳荒,我揣著相機與錄音抗悍,去河邊找鬼。 笑死钳枕,一個胖子當著我的面吹牛缴渊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鱼炒,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼衔沼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了昔瞧?” 一聲冷哼從身側響起指蚁,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎自晰,沒想到半個月后凝化,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡酬荞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年搓劫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片混巧。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡枪向,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咧党,到底是詐尸還是另有隱情秘蛔,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布傍衡,位于F島的核電站深员,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛙埂。R本人自食惡果不足惜辨液,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望箱残。 院中可真熱鬧,春花似錦、人聲如沸被辑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盼理。三九已至谈山,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宏怔,已是汗流浹背奏路。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留臊诊,地道東北人鸽粉。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像抓艳,于是被迫代替她去往敵國和親触机。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫玷或、插件儡首、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,059評論 4 62
  • 狀態(tài)欄的隱藏 狀態(tài)欄的隱藏主要有兩種方法:方法一:通過代碼控制 注意:讓我們先來看看// Setting stat...
    JerryLMJ閱讀 38,110評論 16 79
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實...
    香橙柚子閱讀 23,794評論 8 183
  • 一杯敬明天,一杯敬過往位他。思緒萬千氛濒,何以消愁。 你有沒有一口氣堵在心里棱诱,任你如何深呼吸它都時刻提醒著你泼橘,它的存在÷跹或...
    麋夢閱讀 328評論 0 0
  • 有時和身邊的人聊天靡菇,大部分聽到的都是感覺每天過得很沒意思重归,對什么都不感興趣,上班沒意思厦凤,因為每天都是做那些事情鼻吮,日...
    青梔暮笙閱讀 247評論 0 2