1、狀況欄的隱蔽
狀況欄的隱蔽重要有兩種辦法,上面來一路看看吧。
辦法一:經由過程代碼掌握
@interface UIApplication(UIApplicationDeprecated) // Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system. @property(readwrite, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController prefeXmlRss/ target=_blank class=infotextkey>XmlRss/ target=_blank class=infotextkey>RsstatusBarHidden]") __TVOS_PROHIBITED; - (void)setStatusBarHidden:(BOOL)hidden animated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 3_2) __TVOS_PROHIBITED; // use -setStatusBarHidden:withAnimation: - (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_DEPRECATED_IOS(3_2, 9_0, "Use -[UIViewController prefeXmlRss/ target=_blank class=infotextkey>XmlRss/ target=_blank class=infotextkey>RsstatusBarHidden]") __TVOS_PROHIBITED;
留意:讓我們先來看看// Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
這個正文提醒,蘋果提醒開辟者假如應用的是體系基本的狀況欄款式你的這些設置是不失效的,在接上去要引見的經由過程Info.plist隱蔽狀況欄異樣要留意這件事。
在Info.plist
中添加一個View controller-based status bar appearance
設置選項,設置為NO如許便可以應用上邊的辦法了
留意:添加的View controller-based status bar appearance
是Bool
類型,默許為Yes,很不幸iOS9以後蘋果曾經不推舉應用這些辦法了,這些辦法能用然則會報正告。
那末這些辦法被禁用今後,若何操作呢?正文裡曾經提醒Use -[UIViewController prefeXmlRss/ target=_blank class=infotextkey>RsstatusBarHidden]
這是iOS7以後蘋果在UIViewController
裡添加的新辦法,這麼做的目標可讓開辟者加倍靈巧的自界說每一個ViewController
的狀況欄。
- (BOOL)prefersStatusBarHidden{ return YES; }
iOS7以後UIViewController
中不只供給了這個關於狀況欄的設置的函數,還有其他的,前面具體說。
辦法二:經由過程Info.plist掌握
1,起首我們仍然要設置這個(第2步中的兩種方法都要設置這個參數)
2,然後設置(兩種方法)
或許
二者是等效的!而且二者的狀況是同步的。
2、狀況欄款式
先看看都有哪些款式(說明看正文)
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 // iOS7.0之前黑底白字,iOS7今後跟UIStatusBarStyleLightContent後果一樣 UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1, // iOS7.0之前啟動頁為灰底白字,iOS7今後跟UIStatusBarStyleLightContent後果一樣 UIStatusBarStyleBlackOpaque NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2, } __TVOS_PROHIBITED;
若何設置狀況欄款式
// Setting the statusBarStyle does nothing if your application is using the default UIViewController-based status bar system. @property(readwrite, nonatomic) UIStatusBarStyle statusBarStyle NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]") __TVOS_PROHIBITED; - (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle animated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]") __TVOS_PROHIBITED;
異樣iOS9今後這些辦法被禁用了,蘋果推舉在詳細的viewController
中Use -[UIViewController preferredStatusBarStyle]
- (UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent; }
留意:我們平日應用的viewController
都是嵌套在UINavigationController
中應用的,此時在viewController
中應用- (UIStatusBarStyle)preferredStatusBarStyle;
函數會發明設置並沒有失效。
體系也給我們供給了一個函數- (UIViewController *)childViewControllerForStatusBarStyle
,也能夠處理這個成績,前面會講。
3、配景色
iOS7今後默許情形下狀況欄的配景為通明的,一種方法是我們本身寫一個UIView
作為配景添加到狀況欄上面,如許便可以隨便設置狀況欄的色彩了。
另外一種辦法就是經由過程設置navigationBar
的setBarTintColor
色彩來轉變狀況欄色彩
UIViewController中其他有關狀況欄的函數
preferredStatusBarUpdateAnimation函數
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; // Defaults to UIStatusBarAnimationFade
假如想在以後曾經顯示的UIViewController
中更改狀況欄的款式的話,須要挪用以上函數。挪用該函數後,體系會自動挪用preferredStatusBarStyle
辦法重繪狀況欄的款式
childViewControllerForStatusBarStyle函數
// Override to return a child view controller or nil. If non-nil, that view controller's status bar appearance attributes will be used. If nil, self is used. Whenever the return values from these methods change, -setNeedsUpdatedStatusBarAttributes should be called. - (nullable UIViewController *)childViewControllerForStatusBarStyle NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;
這個函數的前往值默許前往nil
,此時體系就會挪用以後viewControllerA
的preferredStatusBarStyle
函數;假如前往值是另外一個viewControllerB
那末體系就會挪用viewControllerB
的preferredStatusBarStyle
函數。
應用這個函數便可以處理嵌套UINavigationController
設置款式有效的成績。
說明一下為何嵌套UINavigationController
的viewController
的preferredStatusBarStyle
函數設置有效:
在我們嵌套了UINavigationController
的時刻,我們的AppDelegate.Window.rootViewController
平日是我們創立的navigationController
,這時候起首會挪用的是navigationController
中的childViewControllerForStatusBarStyle
函數,由於默許前往nil
,那末接上去就會挪用navigationController
自己的preferredStatusBarStyle
函數,所以我們在viewController
中經由過程preferredStatusBarStyle
函數設置的狀況欄款式就不會被挪用發明,所以也就有效了。
所以我們要本身創立一個繼續於UINavigationcontroller
的NavigationController
,在這個子類中重寫childViewControllerForStatusBarStyle
函數
- (UIViewController *)childViewControllerForStatusBarStyle{ return self.topViewController; }
如許navigationController
中的childViewControllerForStatusBarStyle
函數會前往navigationController
中最下層的viewController
,那末viewController
中的preferredStatusBarStyle
函數的設置就會被體系獲知
childViewControllerForStatusBarHidden函數
- (nullable UIViewController *)childViewControllerForStatusBarHidden NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;
childViewControllerForStatusBarHidden
函數的應用道理同上,不再贅述。
preferredStatusBarUpdateAnimation函數
// 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
動畫情勢以下
typedef NS_ENUM(NSInteger, UIStatusBarAnimation) { UIStatusBarAnimationNone, UIStatusBarAnimationFade NS_ENUM_AVAILABLE_IOS(3_2), UIStatusBarAnimationSlide NS_ENUM_AVAILABLE_IOS(3_2), } __TVOS_PROHIBITED;
這個函數前往了動畫後果。動畫後果只要在prefersStatusBarHidden
函數前往值變更的時刻才會展現,同時要經由過程挪用
[self setNeedsStatusBarAppearanceUpdate]
函數來重繪狀況欄
4、運用
我們可以經由過程隱蔽體系狀況欄,然後自界說UIWindow
經由過程設置setWindowLevel:UIWindowLevelStatusBar
完成自界說狀況欄。
總結
以上就是這篇文章的全體內容了,願望能對列位iOS開辟者們有所贊助,假如有疑問年夜家可以留言交換。
【深刻懂得iOS的狀況欄】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!