iOS 狀態欄顏色屬性修改總結

感覺有時候修改狀態欄的需求挺多的,今天總結一下:

iOS 狀態欄就是手機最上面顯示電池時間等部分,如下圖,狀態欄背景部分比較容易設置,我們可以通過設置導航欄的背景色或背景圖片或者控制視圖的背景色來設置 即 navigationBar的tintColor ,但是如果設置了setBackgroundImage(<#T##backgroundImage: UIImage?##UIImage?#>, for: <#T##UIBarMetrics#>) 那麼前面的設置將無效。

主要總結下設置前景色的修改,即上圖文字或者符號的顏色

xcode 有幾個部分可以設置如下圖

  圖中Status Bar Style 默認是default ,顯示爲黑色。如果不帶導航欄,如圖中修改爲light後,info.plist 中會自動增加

此時狀態欄的顏色爲白色。

下面的Hide status bar 默認未勾選,即所有的頁面導航欄都不隱藏,當我們勾選後可以設置啓動頁隱藏狀態欄,同時plist文件中也會增加相應設置項

還有就是修改info.plist 中的

這個View controller-based status bar apparence 項主要對status bar 兩種設置的優先級 即全局的apparence 和viewController 中的preferredStatusBarStyle: UIStatusBarStyle 屬性的設置的優先級,YES 則View controller中的設置優先級較高,全局的設置則無效。同理,設置爲NO,那麼在ViewController 中對狀態欄的設置將無效。

知道這些就可以根據需求,決定是否設置全局的狀態欄的顏色還是單個controller中的狀態欄的變化。

但是對於帶導航欄的控制器上面講的設置status style可能無效。因爲當前控制器被導航欄包裹,這時候應該在導航欄中設置狀態欄纔是對的。

我們可以單獨創建一個導航欄的子類,通過ViewController的以下方法

 @available(iOS 7.0, *)

    open var childViewControllerForStatusBarStyle: UIViewController? { get }

   設置導航欄的最外層控制器的狀態欄起作用

 override var childViewControllerForStatusBarStyle: UIViewController? {
        
        return topViewController

    }

還有一些需求是需要隨時改變狀態欄的顏色,

 @available(iOS 7.0, *)

    open func setNeedsStatusBarAppearanceUpdate()

通過調用該方法更新狀態欄的顏色

 @available(iOS 7.0, *)

    open var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { get }

設置狀態欄改變的動畫效果

寫了個demo:狀態欄隨tableView 滾動變化,頂部圖片隨滾動放大 下載地址:http://download.csdn.net/download/mengguihua110/10257526 有時間再放到github 上去







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章