2016-07-23 48 views
2

狀態欄的顏色在我的應用程序我有4個視圖控制器,並在他們兩個我從白色更改狀態欄黑色這樣的:迅速IOS試圖改變某些VC的

override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 

     UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default 
    } 

    override func viewWillDisappear(animated: Bool) { 
     super.viewWillDisappear(animated) 

     UIApplication.sharedApplication().statusBarStyle = .LightContent 
    } 

的問題是如果我在兩個ViewController之間切換,它們都具有上面的代碼,狀態欄將首先變爲黑色,這是正確的,但是當它進入另一個ViewController時,它會再次變爲白色。

如何在某些ViewController上保持狀態欄爲白色?

回答

0

嘗試在VC中添加以下方法。使用.default或.lightContent更改狀態欄顏色。我測試使用的Xcode 8和迅速3:

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

我創建了一個新的選項卡式應用在Xcode 7.3.1和SWIFT 2.3。我有兩個與FirstViewController和SecondViewController關聯的選項卡。在FirstViewController我增加了以下方法:

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

,並在SecondViewController,我改變了背景爲黑色,我增加了以下方法:

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

最後,我添加了兩個按鈕在FirstViewController。一個按鈕以模態方式呈現控制器,另一個按鈕以按下方式呈現。當我提出的觀點模態的'preferredStatusBarStyle的工作,但是當我通過推提交我需要添加以下代碼行:

self.navigationController?.navigationBar.barStyle = .Black 
+0

這也需要在項目的info中添加'基於視圖控制器的狀態欄外觀'鍵到on/YES。 plist'文件,並且可能需要在應用程序的根視圖控制器子類上定製實現' - (UIViewController *)childViewControllerForStatusBarStyle;',這取決於您的視圖層次結構 – markedwardmurray

+0

這並不奏效,因爲@markedwardmurray說過。但我不能使用'''覆蓋func viewWillAppear(animated:Bool){'''在每個VC中都有''''''''''''''''''''''''' – user2722667

+0

你會想到,但是改變視圖控制器之間狀態欄的全局狀態有很多特性。使用基於視圖控制器的狀態欄外觀更加可靠。在iOS 10中,在UIViewController上重寫的獲取器實際上將被製作爲完整的屬性。全球外觀方法是從應用程序預期具有單一顏色方案的日子開始的,無論是明亮的還是黑暗的。在應用程序啓動之後,按頻率切換它並不奏效 – markedwardmurray

0

如果你真的不想來覆蓋preferredStatusBarStyle委託方法,你仍然可以使用:

UIApplication.sharedApplication().statusBarStyle = .LightContent 

通過去除:

override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 

    UIApplication.sharedApplication().statusBarStyle = .LightContent 
} 

,讓只讓狀態欄由什麼在viewWillAppear中發生的事情進行設置。顯然這更容易出錯,但是如果你的導航是相對線性的,那麼這將是最簡單的解決方案