你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 深刻懂得iOS的狀況欄

深刻懂得iOS的狀況欄

編輯:IOS開發綜合

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 appearanceBool類型,默許為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今後這些辦法被禁用了,蘋果推舉在詳細的viewControllerUse -[UIViewController preferredStatusBarStyle]

- (UIStatusBarStyle)preferredStatusBarStyle{
  return UIStatusBarStyleLightContent;
}

留意:我們平日應用的viewController都是嵌套在UINavigationController中應用的,此時在viewController中應用- (UIStatusBarStyle)preferredStatusBarStyle;函數會發明設置並沒有失效。

體系也給我們供給了一個函數- (UIViewController *)childViewControllerForStatusBarStyle,也能夠處理這個成績,前面會講。

3、配景色

iOS7今後默許情形下狀況欄的配景為通明的,一種方法是我們本身寫一個UIView作為配景添加到狀況欄上面,如許便可以隨便設置狀況欄的色彩了。

另外一種辦法就是經由過程設置navigationBarsetBarTintColor色彩來轉變狀況欄色彩

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,此時體系就會挪用以後viewControllerApreferredStatusBarStyle函數;假如前往值是另外一個viewControllerB那末體系就會挪用viewControllerBpreferredStatusBarStyle函數。

應用這個函數便可以處理嵌套UINavigationController設置款式有效的成績。

說明一下為何嵌套UINavigationControllerviewControllerpreferredStatusBarStyle函數設置有效:

在我們嵌套了UINavigationController的時刻,我們的AppDelegate.Window.rootViewController平日是我們創立的navigationController,這時候起首會挪用的是navigationController中的childViewControllerForStatusBarStyle函數,由於默許前往nil,那末接上去就會挪用navigationController自己的preferredStatusBarStyle函數,所以我們在viewController中經由過程preferredStatusBarStyle函數設置的狀況欄款式就不會被挪用發明,所以也就有效了。

所以我們要本身創立一個繼續於UINavigationcontrollerNavigationController,在這個子類中重寫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的狀況欄】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved