国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS狀態欄設置詳解

2019-11-09 14:01:46
字體:
來源:轉載
供稿:網友

在iOS開發過程中,經常會設置狀態欄的樣式,所以這里來學習一下狀態欄的常用的設置方法。

1.首先明白狀態欄的基本概念

iOS上狀態欄 就是指的最上面的20像素高的部分狀態欄分前后兩部分,要分清這兩個概念,后面會用到:

前景部分:就是指的顯示電池、時間等部分;

背景部分:就是顯示黑色或者圖片的背景部分;

如下圖:前景部分為白色,背景部分為黑色

注意:官方文檔里面講的很清楚,iOS7以后才有狀態欄的自定義設置,所以該文章對iOS7之前可能無效!2.設置狀態欄前景和背景這里必須注意:設置狀態欄的時候,首先分為兩種情況,其一:在plist里面設置了View controller-based status bar appearance為NO,這個屬性的意義就是不讓控制器基于status bar appearance的設置,也就是自己可以在每一個控制器里面自己進行設置。這個時候就不能再用 

- (UIStatusBarStyle)PReferredStatusBarStyle這個方法來設置,是沒有效果的,而必須要用[[UIapplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]來設置,其二,當plist里面設置了View controller-based status bar appearance為YES,或者沒有設置的時候(默認為YES),這個時候可以根據(UIStatusBarStyle)preferredStatusBarStyle這個方法來設置,用這個方法的時候也分為兩種情況,一種情況是當前要設置的ViewController嵌入在一個NavigationController里面的時候,

 系統默認的將指定狀態欄的權利交給了導航控制器,要是想讓導航控制器的childViewController來設置狀態欄的顏色,就要自定義導航控制器來指定! 自定義導航控制器后,要是想指定狀態欄由誰來設置,就需要說明清楚權利交給誰,下面兩個方法都可以來指定,通過方法名也可以很清楚的理解,preferredStatusBarStyle這個方法重寫,來返回想要指定的控制器的這個方法的返回結果,childViewControllerForStatusBarStyle這個方法則是用來說明讓誰來擁有這個權利,兩個方法都可以做的,自己選擇即可,個人覺得第一個比較好,指定清楚之后,直接調這個控制器的這個方法返回值即可[objc] view plain copy- (UIStatusBarStyle)preferredStatusBarStyle  {      ViewController *vc = self.topViewController;      return [vc preferredStatusBarStyle];  }    - (UIViewController *)childViewControllerForStatusBarStyle  {      return self.topViewController;  }  

完成上面的自定義后,只要在當前的Viewcontroller里面實現

preferredStatusBarStyle方法,設置好想要的狀態欄顏色,然后在需要變更的地方調用[selfsetNeedsStatusBarAppearanceUpdate];

(這個方法會通知系統去調用當前UIViewController的preferredStatusBarStyle方法),這個和UIView的setNeedsDisplay原理差不多(調用UIView對象的setNeedsDisplay方法后,系統會在下次頁面刷新時,調用重繪該view,系統最快能1秒刷新60次頁面,具體要看程序設置),

下面在進行分情況的討論

設置statusBar的【前景部分】簡單來說,就是設置顯示電池電量、時間、網絡部分標示的顏色, 這里只能設置兩種顏色:默認的黑色(UIStatusBarStyleDefault)白色(UIStatusBarStyleLightContent)可以設置的地方有兩個:plist設置里面 和 程序代碼里

1.plist設置statusBar

在plist里增加一行 UIStatusBarStyle(或者是“Status bar style”也可以),然后在后面設置相應的至即可,在程序啟動完成后就會設置為plist里面指定的顏色。2.代碼設置statusBar1》[objc] view plain copy<span style="font-size:14px;">[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; </span>  [objc] view plain copy<span style="font-size:14px;">  </span>  [objc] view plain copy//相對于上面的接口,這個接口可以動畫的改變statusBar的前景色    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];  但是注意,上面的這種代碼設置的前提是必須在plist里面指定一個屬性,即View controller-based status bar appearance設置為NO,然后在viewWillAppear里面執行上面的代碼,才會設置成功,否則是不會成功的!上面這個屬性的意思可以理解為控制器不基于status bar appearance,也就是說控制器可以自己進行自定義,每一個控制器都可以進行狀態欄的設置,不必拘于 bar appearance。2》[objc] view plain copy<span style="font-size:14px;">- (UIStatusBarStyle)preferredStatusBarStyle  {      return UIStatusBarStyleLightContent;  }</span>  這種設置方式則不必再在plist里面設置什么屬性,直接就會生效,所以一般還是用這種方式設置比較方便。3》以上兩種方法一般是在剛進入一個控制器的時候進行設置,還有一種情況是需要動態的根據用戶交互來動態的改變狀態欄的顏色[objc] view plain copy- (void)testStatusBar  {      UIStatusBarStyle style = [UIApplication sharedApplication].statusBarStyle;      if (style) {          [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;      } else {          [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;      }        }  這樣就可以做到動態的設置顏色了!設置statusBar的【背景部分】

背景部分,簡單來說,就是背景色;改變方法有兩種:

系統提供的方法

navigationBar的setBarTintColor接口,用此接口可改變statusBar的背景色

注意:一旦你設置了navigationBar的- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics接口,那么上面的setBarTintColor接口就不能改變statusBar的背景色,statusBar的背景色就會變成純黑色。

另辟蹊徑

創建一個UIView,設置該UIView的frame.size 和statusBar大小一樣,設置該UIView的frame.origin 為{0,-20},設置該UIView的背景色為你希望的statusBar的顏色,在navigationBar上addSubView該UIView即可。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 漳浦县| 启东市| 昌黎县| 堆龙德庆县| 高要市| 长泰县| 遂宁市| 巴彦县| 会同县| 乐山市| 德安县| 榆社县| 玉树县| 杭锦后旗| 石门县| 扶风县| 霍林郭勒市| 温泉县| 西藏| 吉木乃县| 陕西省| 镇巴县| 德阳市| 金昌市| 金塔县| 留坝县| 明光市| 临夏县| 扎兰屯市| 衡南县| 托克托县| 新田县| 红原县| 年辖:市辖区| 绍兴县| 绥宁县| 龙岩市| 化隆| 尚义县| 成武县| 洛川县|