日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS状态栏设置详解

發(fā)布時間:2024/3/24 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS状态栏设置详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在iOS開發(fā)過程中,經(jīng)常會設(shè)置狀態(tài)欄的樣式,所以這里來學(xué)習(xí)一下狀態(tài)欄的常用的設(shè)置方法。

1.首先明白狀態(tài)欄的基本概念

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

  • 前景部分:就是指的顯示電池、時間等部分;
  • 背景部分:就是顯示黑色或者圖片的背景部分;

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


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

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

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

  • 完成上面的自定義后,只要在當(dāng)前的Viewcontroller里面實現(xiàn)

    preferredStatusBarStyle方法,設(shè)置好想要的狀態(tài)欄顏色,然后在需要變更的地方調(diào)用[selfsetNeedsStatusBarAppearanceUpdate];

    (這個方法會通知系統(tǒng)去調(diào)用當(dāng)前UIViewControllerpreferredStatusBarStyle方法)這個和UIViewsetNeedsDisplay原理差不多(調(diào)用UIView對象的setNeedsDisplay方法后,系統(tǒng)會在下次頁面刷新時,調(diào)用重繪該view,系統(tǒng)最快能1秒刷新60次頁面,具體要看程序設(shè)置),

    下面在進行分情況的討論

    • 設(shè)置statusBar的【前景部分】

    簡單來說,就是設(shè)置顯示電池電量、時間、網(wǎng)絡(luò)部分標(biāo)示的顏色, 這里只能設(shè)置兩種顏色:

    默認的黑色(UIStatusBarStyleDefault)
    白色(UIStatusBarStyleLightContent)
    可以設(shè)置的地方有兩個:plist設(shè)置里面 和 程序代碼里

    1.plist設(shè)置statusBar

    在plist里增加一行 UIStatusBarStyle(或者是“Status bar style”也可以),然后在后面設(shè)置相應(yīng)的至即可,在程序啟動完成后就會設(shè)置為plist里面指定的顏色。

    2.代碼設(shè)置statusBar 1》 [objc]?view plaincopy
  • <span?style="font-size:14px;">[[UIApplication?sharedApplication]?setStatusBarStyle:UIStatusBarStyleLightContent];?</span>??
  • [objc]?view plaincopy
  • <span?style="font-size:14px;">??
  • </span>??
  • [objc]?view plaincopy
  • //相對于上面的接口,這個接口可以動畫的改變statusBar的前景色????
  • [[UIApplication?sharedApplication]?setStatusBarStyle:UIStatusBarStyleLightContent?animated:YES];??
  • 但是注意,上面的這種代碼設(shè)置的前提是必須在plist里面指定一個屬性,即View controller-based status bar appearance設(shè)置為NO,然后在viewWillAppear里面執(zhí)行上面的代碼,才會設(shè)置成功,否則是不會成功的!上面這個屬性的意思可以理解為控制器不基于status bar appearance,也就是說控制器可以自己進行自定義,每一個控制器都可以進行狀態(tài)欄的設(shè)置,不必拘于?bar appearance。

    2》 [objc]?view plaincopy
  • <span?style="font-size:14px;">-?(UIStatusBarStyle)preferredStatusBarStyle??
  • {??
  • ????return?UIStatusBarStyleLightContent;??
  • }</span>??
  • 這種設(shè)置方式則不必再在plist里面設(shè)置什么屬性,直接就會生效,所以一般還是用這種方式設(shè)置比較方便。 3》 以上兩種方法一般是在剛進入一個控制器的時候進行設(shè)置,還有一種情況是需要動態(tài)的根據(jù)用戶交互來動態(tài)的改變狀態(tài)欄的顏色 [objc]?view plaincopy
  • -?(void)testStatusBar??
  • {??
  • ????UIStatusBarStyle?style?=?[UIApplication?sharedApplication].statusBarStyle;??
  • ????if?(style)?{??
  • ????????[UIApplication?sharedApplication].statusBarStyle?=?UIStatusBarStyleDefault;??
  • ????}?else?{??
  • ????????[UIApplication?sharedApplication].statusBarStyle?=?UIStatusBarStyleLightContent;??
  • ????}??
  • ??????
  • }??
  • 這樣就可以做到動態(tài)的設(shè)置顏色了!
    • 設(shè)置statusBar的【背景部分】

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

    系統(tǒng)提供的方法

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

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

    另辟蹊徑

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

    總結(jié)

    以上是生活随笔為你收集整理的iOS状态栏设置详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。