2016-11-24 50 views
-1

我需要一個白色的狀態欄爲我的主要初始ViewController,但也能夠隱藏在另一個ViewController。我可以做一個或另一個,但不能同時做。有什麼建議麼?iOS設置狀態欄白色,並隱藏在另一個ViewController

我將它設置爲白色由 的Info.plist

override func preferredStatusBarStyle() -> UIStatusBarStyle { 
     return .LightContent 
} 

設置

基於控制器的視圖狀態欄的外觀關鍵NO並隱藏它(在另一個ViewController模態地呈現)我呢,

override func prefersStatusBarHidden() -> Bool { 
    return statusBarHidden 
} 

但是它不會隱藏,除非我刪除了我之前添加到Info.plist的密鑰,但是如果我刪除了密鑰,那麼狀態欄會回到黑色。


編輯,我的解決方案: 視圖控制器類沒有在我的情況下工作,因爲我有嵌入導航控制器的主視圖控制器,我的修補程序是覆蓋相同的方法,但對於導航控制器,而不是有問題的視圖控制器。

extension UINavigationController { 
    public override func preferredStatusBarStyle() -> UIStatusBarStyle { 
     return .LightContent 
    } 
} 
+0

哪個版本的Xcode是你的工作嗎?我的意思是swift3或更早版本? – Rajat

+0

swift 2.2,xcode 7.3 ...還需要留在xcode7.3中一段時間​​。 – sweepez

+0

不要爲此使用Info.plist。使用提供的視圖控制器方法。 – matt

回答

0

如果您在Info.plist中

添加

基於控制器的視圖狀態欄的外觀關鍵NO您應該使用[UIApplication setStatusBarHidden:withAnimation:][UIApplication setStatusBarStyle:animated:]切換到狀態欄的外觀。由於這是在說你的方法不會被調用

蘋果document

UIViewControllerBasedStatusBarAppearance(布爾 - iOS設備)指定狀態欄的外觀是否是基於由視圖控制器,是目前首選的風格在狀態欄下。如果此鍵不存在或其值設置爲YES,則視圖控制器將確定狀態欄樣式。當鍵設置爲NO時,視圖控制器(或應用程序)必須使用UIApplication對象明確地設置狀態欄樣式。

UIViewControllerBasedStatusBarAppearance密鑰與View controller-based status bar appearance密鑰相同。

如果你不添加密鑰,你的方法應該可以工作。嘗試在這兩個ViewController中添加兩個方法,並添加一些斷點以查看它們被調用或錯誤覆蓋。

中的代碼雨燕3.0的Xcode 8.2爲我工作:

override open var preferredStatusBarStyle: UIStatusBarStyle { 
    return .lightContent 
}  


override open var prefersStatusBarHidden: Bool { 
    return true 
} 
+0

謝謝,現在無法嘗試,今晚可能會嘗試(也是,我不是那種投下你的答案的人)。問題是,如果我從plist刪除鍵狀態欄保持黑色。此外即時運行在xcode 7.3和[UIApplication setStatusBarHidden:withAnimation:]已被棄用。 – sweepez

+0

謝謝,就像我說過的我不是那個投下你答案的人。此外,我發現我的問題,視圖控制器類無法正常工作,因爲我已將VC嵌入到NavigationController中。 – sweepez