設置app的狀態欄樣式

http://www.jianshu.com/p/9f7f3fa624e7git

http://cocoa.venj.me/blog/view-controller-based-status-bar-style-and-uinavigationcontroller/github

http://www.jianshu.com/p/4196d7cf95f4api

 

  • 狀態欄的字體爲黑色: UIStatusBarStyleDefaultapp

  • 狀態欄的字體爲白色: UIStatusBarStyleLightContentide

設置app的狀態欄樣式的使用使用了舊的方式,在info.plist裏面設置了View controller-based status bar appearance爲NO,默認爲YES,通常式iOS6的時候使用這種方式,iOS7,8也兼容,可是到了iOS9就報了警告。wordpress

一. 在 info.plist 中,將 View controller-based status bar appearance 設爲 NO字體

狀態欄字體的顏色只由下面的屬性設定,默認爲白色:ui

// default is UIStatusBarStyleDefault [UIApplication sharedApplication].statusBarStyle

解決個別 vc 中狀態欄字體顏色不一樣的辦法atom

一、在info.plist中,將View controller-based status bar appearance設爲NO.spa

二、在app delegate中:

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

三、在個別狀態欄字體顏色不同的vc中

-(void)viewWillAppear:(BOOL)animated{ [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault; } -(void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; }

之前咱們經過上面代碼改變狀態了顏色,iOS9之後點進去看api發現以下說明

// 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]"); - (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle animated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]");

解決辦法:

修改方式將View controller-based status bar appearance設置爲YES,而後使用新的方式來實現狀態欄的樣式。

- (UIStatusBarStyle)preferredStatusBarStyle; - (UIViewController *)childViewControllerForStatusBarStyle; - (void)setNeedsStatusBarAppearanceUpdate

View controller-based status bar appearance的默認值就是YES。

若是View controller-based status bar appearance爲YES。

則[UIApplication sharedApplication].statusBarStyle 無效。

用下面的方法:

一、在vc中重寫vc的preferredStatusBarStyle方法。

-(UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleDefault; }

二、在viewDidload中調用:[self setNeedsStatusBarAppearanceUpdate];

可是,當vc在nav中時,上面方法沒用 ,vc中的preferredStatusBarStyle方法根本不用被調用。

緣由是,[self setNeedsStatusBarAppearanceUpdate]發出後,

只會調用navigation controller中的preferredStatusBarStyle方法,

vc中的preferredStatusBarStyley方法跟本不會被調用。

解決辦法有兩個:

方法一:

設置navbar的barStyle 屬性會影響status bar 的字體和背景色。以下。

//status bar的字體爲白色

//導航欄的背景色是黑色。

self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

//status bar的字體爲黑色

//導航欄的背景色是白色,狀態欄的背景色也是白色。

//self.navigationController.navigationBar.barStyle = UIBarStyleDefault;

方法二:

自定義一個nav bar的子類,在這個子類中重寫preferredStatusBarStyle方法:

Nav* nav = [[Nav alloc] initWithRootViewController:vc];

self.window.rootViewController = nav; @implementation Nav - (UIStatusBarStyle)preferredStatusBarStyle { UIViewController* topVC = self.topViewController; return [topVC preferredStatusBarStyle]; }



=======================
 

UINavigationController和View Controller-based狀態欄風格

JUL 24TH, 2014 10:30 AM

從iOS 7開始, UIViewController有了一個新的方法:- preferredStatusBarStyle,可讓用戶指定狀態欄風格。但問題是這個方法只有在ViewController不包含在UINavigationController中時才起做用。大部分狀況下,ViewController不會單獨使用,通常都會嵌套在UINavigationController中的。由於不知道這一點,因此在很長一段時間內,我都很困惑,明明我已經在個人ViewController裏寫了- preferredStatusBarStyle, 卻一點都不起做用。

知道了緣由,接下來就簡單了。咱們能夠寫一個UINavigationController的擴展,覆蓋其默認實現,返回最上面的ViewControllerpreferredStatusBarStyle

代碼以下:

1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 
//UINavigationController+StatusBar.h #import <UIKit/UIKit.h>  @interface UINavigationController (StatusBar) - (UIStatusBarStyle)preferredStatusBarStyle; @end  //UINavigationController+StatusBar.m #import "UINavigationController+StatusBar.h"  @implementation UINavigationController (StatusBar) - (UIStatusBarStyle)preferredStatusBarStyle {  return [[self topViewController] preferredStatusBarStyle]; } @end 

用Swift來寫:

1
2 3 4 5 
extension UINavigationController {  override public func preferredStatusBarStyle() -> UIStatusBarStyle {  return self.topViewController.preferredStatusBarStyle()  } } 

而後,在須要使用UINavigationController的時候,引入UINavigationController+StatusBar.h頭文件就能夠了。若是你用Swift,增長了extension就完成了。

補充:

要使用View Controller Based Status Bar Style,你可能須要在項目的的Info.plist裏增長一條記錄:「View controller-based status bar appearance」,並將其值設置成YES

參考來源:Being Objective…

示例代碼(Swift):NavStatusStyle

(全文完)

相關文章
相關標籤/搜索