設(shè)置statusBar的前景部分
狀態(tài)欄類型:
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
UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1,
UIStatusBarStyleBlackOpaque NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2,
} __TVOS_PROHIBITED;
狀態(tài)欄修改方式:
-
plist設(shè)置
在plist添加一行
UIStatusBarStyle(或Status bar style),值可以是- UIStatusBarStyleDefault
- UIStatusBarStyleLightContent
設(shè)置后app啟動的launch頁顯示的時(shí)候,statusBar的樣式就是上面plist設(shè)置的風(fēng)格.
-
代碼設(shè)置
-
iOS 2.0 ~ 9.0
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
-
-
iOS 7.0 ~
Tag:
? UIViewcontroller或者UINavigationController都是控制器,下面統(tǒng)一叫它們控制器。
? 狀態(tài)欄statusBar是屬于UIApplication的一個(gè)UI,也就是說一個(gè)app只有一個(gè)狀態(tài)欄,并不是每一個(gè)控制器都擁有的屬性,所以在控制器中通過
preferredStatusBarStyle方法修改的狀態(tài)欄樣式不一定有用,只有當(dāng)該控制器是當(dāng)前app的控制者的時(shí)候,狀態(tài)欄的樣式才會聽命于這個(gè)控制器。? 一般我們都是寫一個(gè)UINavigationController作為window的rootViewController,其它的控制器都是在UINavigationController的管理下,app的控制權(quán)一直在UINavigationController手中,所以狀態(tài)欄的樣式只聽命于這個(gè)UINavigationController。
? 由此我們得出一種控制狀態(tài)欄風(fēng)格的方法,自定義一個(gè)UINavigationController,在自定義UINavigationController中實(shí)現(xiàn)
preferredStatusBarStyle方法指定狀態(tài)欄樣式,只要更改這個(gè)自定義類中preferredStatusBarStyle方法里的值,就能更改狀態(tài)欄的風(fēng)格。? 如果要讓這個(gè)UINavigationController管理的所有控制器也能通過
preferredStatusBarStyle方法更改狀態(tài)欄風(fēng)格,可以通過childViewControllerForStatusBarStyle方法出借更改權(quán)限給指定的控制器,代碼如下:- (UIViewController *)childViewControllerForStatusBarStyle{ return self.topViewController; }這樣在UINavigationController管理?xiàng)V械臈m斂刂破骶陀袡?quán)限控制器狀態(tài)欄了。
? 除此之外,我們也可以用模態(tài)跳轉(zhuǎn)的方式來控制器與控制器之間的跳轉(zhuǎn),這種情況下每個(gè)控制器都有權(quán)限控制狀態(tài)欄風(fēng)格。
[self presentViewController:vc animated:YES completion:^{}];?
指定當(dāng)前控制器的狀態(tài)欄風(fēng)格- (UIStatusBarStyle)preferredStatusBarStyle;?
指定當(dāng)前控制器的子控制器讀取誰的狀態(tài)欄樣式,當(dāng)返回nil時(shí),默認(rèn)讀取自身設(shè)置的狀態(tài)欄樣式- (UIViewController *)childViewControllerForStatusBarStyle;調(diào)用該方法,調(diào)用當(dāng)前擁有控制權(quán)的控制器的
-preferredStatusBarStyle方法刷新狀態(tài)欄風(fēng)格- (void)setNeedsStatusBarAppearanceUpdate;
設(shè)置statusBar的【背景部分】
-
iOS 7.0之前 通過
tintColor修改 -
iOS 7.0之后 通過
barTintColor修改
如果調(diào)用了以下方法,barTintColor將無效
- (void)setBackgroundImage:(nullable UIImage *)backgroundImage forBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics
NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR;
```