亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

深入理解iOS的狀態欄

2020-07-26 03:10:26
字體:
來源:轉載
供稿:網友

一、狀態欄的隱藏

狀態欄的隱藏主要有兩種方法,下面來一起看看吧。

方法一:通過代碼控制

@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 prefersStatusBarHidden]") __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 prefersStatusBarHidden]") __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 prefersStatusBarHidden]這是iOS7之后蘋果在UIViewController里添加的新方法,這么做的目的可以讓開發者更加靈活的自定義每個ViewController的狀態欄。

- (BOOL)prefersStatusBarHidden{  return YES;}

iOS7之后UIViewController中不只提供了這個關于狀態欄的設置的函數,還有其他的,后面詳細說。

方法二:通過Info.plist控制

1,首先我們依然要設置這個(第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,也可以解決這個問題,后面會講。

三、背景色

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]函數來重繪狀態欄

四、應用

我們可以通過隱藏系統狀態欄,然后自定義UIWindow通過設置setWindowLevel:UIWindowLevelStatusBar實現自定義狀態欄。

總結

以上就是這篇文章的全部內容了,希望能對各位iOS開發者們有所幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩在线欧美在线| 综合国产在线观看| 成人国产精品一区| 久久久国产一区二区三区| 国产亚洲a∨片在线观看| 欧美国产视频日韩| 国产成人精品电影久久久| 亚洲电影第1页| 久色乳综合思思在线视频| 热99精品里视频精品| 国产va免费精品高清在线观看| 亚洲精品有码在线| 最近中文字幕mv在线一区二区三区四区| 亚洲大胆人体在线| 欧美日韩成人在线视频| 永久免费看mv网站入口亚洲| 69视频在线播放| 久久久久久久爱| 日韩亚洲综合在线| 国产精自产拍久久久久久蜜| 久久久精品视频在线观看| 色综合天天狠天天透天天伊人| 国产精品久久久久久久久免费看| 日韩美女在线看| 国产精品一区二区三区免费视频| 久久亚洲综合国产精品99麻豆精品福利| 亚洲乱码国产乱码精品精| 国产精品免费电影| 久久精品国产免费观看| 91在线精品视频| 亚洲精品国偷自产在线99热| 久久亚洲一区二区三区四区五区高| 日韩久久免费电影| 久久色免费在线视频| 欧美精品精品精品精品免费| 色综合视频一区中文字幕| 亚洲视频在线观看| 欧美激情国产日韩精品一区18| 精品久久久久久久久中文字幕| 在线播放国产一区中文字幕剧情欧美| 国产精品美女久久久久久免费| 91精品国产99久久久久久| 91亚洲人电影| 精品中文字幕乱| 国产91精品视频在线观看| 亚洲偷熟乱区亚洲香蕉av| 欧美日韩一区二区三区| 国产精品大片wwwwww| 狠狠爱在线视频一区| www.欧美免费| 国产精品久久77777| 欧美情侣性视频| 欲色天天网综合久久| 精品少妇v888av| 国产一区二区三区在线视频| 日韩美女免费视频| 大量国产精品视频| 九九热在线精品视频| 91国产精品视频在线| 国产精品一区二区av影院萌芽| 国产精品老女人视频| 韩国v欧美v日本v亚洲| 国产精品欧美亚洲777777| 精品久久久久久亚洲精品| 97超级碰碰碰| 欧美一级黄色网| 国产精品男女猛烈高潮激情| 57pao成人国产永久免费| 欧美激情一区二区三级高清视频| 国产欧美va欧美va香蕉在线| 97热在线精品视频在线观看| 78色国产精品| 国产丝袜精品第一页| 日韩成人激情在线| 日韩专区在线观看| 亚洲精品免费av| 欧美午夜精品伦理| 久久亚洲成人精品| 久久最新资源网| 欧美小视频在线| 国产精品流白浆视频| 欧美一区二区视频97| 久久九九精品99国产精品| 国产成人精品久久二区二区91| 色悠悠国产精品| 国产欧美日韩中文字幕在线| 亚洲白虎美女被爆操| 91中文在线视频| 欧美专区国产专区| 欧洲成人免费视频| 欧美成人激情图片网| 日韩在线视频免费观看| 疯狂欧美牲乱大交777| 国产日韩在线播放| 国产一区二区在线免费视频| 欧美日韩中文字幕综合视频| 国产精品天天狠天天看| 日韩美女视频免费看| 日韩成人在线网站| 亚洲的天堂在线中文字幕| 国产999精品视频| 尤物yw午夜国产精品视频| 亚洲成人精品久久久| 久久久国产精品x99av| 在线a欧美视频| 亚洲精品v天堂中文字幕| 国产91在线视频| 精品成人av一区| 日韩电影免费观看在线| 91久久综合亚洲鲁鲁五月天| 亚洲欧美另类国产| 亚洲无亚洲人成网站77777| 一个人www欧美| 亚洲天堂成人在线| 欧美精品精品精品精品免费| 91亚洲精品久久久久久久久久久久| 久久久噜噜噜久久中文字免| 亚洲乱亚洲乱妇无码| 日韩欧美国产骚| 久久亚洲电影天堂| 国产欧美最新羞羞视频在线观看| 国产精品久久久久久久久久久新郎| 国产成人精品在线| 久久免费视频这里只有精品| 欧美亚洲在线播放| 国产欧美中文字幕| 精品视频www| 欧美在线一级va免费观看| 国产自摸综合网| 欧美影院在线播放| 成人在线免费观看视视频| 久久综合88中文色鬼| 国产不卡精品视男人的天堂| 高跟丝袜欧美一区| 欧美高清videos高潮hd| 国产精品a久久久久久| 国产精品 欧美在线| 久久久久久久电影一区| 欧美中文字幕在线视频| 欧美一级免费看| 亚洲精品国偷自产在线99热| 成人美女av在线直播| 日本精品久久电影| 日韩欧美在线观看视频| 91九色国产在线| 在线观看不卡av| 亲子乱一区二区三区电影| 国内精品美女av在线播放| 日本精品性网站在线观看| 国产精品旅馆在线| www国产亚洲精品久久网站| 热久久美女精品天天吊色| 国产精品久久久久久久久粉嫩av| 亚洲国语精品自产拍在线观看| 久久精品国产久精国产思思| 91在线国产电影| 色妞色视频一区二区三区四区| 精品中文视频在线| 国产一区视频在线播放| 亚洲欧美一区二区精品久久久| 高清在线视频日韩欧美| 主播福利视频一区| 一区二区三区www| 成人午夜在线视频一区|