IOS 9 statusbar更改
1. 簡(jiǎn)單情景 (不同的view controller 設(shè)置不同的 status 顏色)
(1)修改 plist.info
添加 View controller-based status bar appearance 項(xiàng) 為YES(擴(kuò)展:添加 Status bar style 項(xiàng)并設(shè)置 三種值一種 :Gray style (default) 苟呐、Transparent black style 、Opaque black style 為全局默認(rèn)的 顏色)
(2) 在 需要的ViewController 里 重寫- (UIStatusBarStyle)preferredStatusBarStyle 方法 返回想要的顏色 (return )
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;
2.復(fù)雜情景(你的viewController 是由 navigationVC push 過(guò)來(lái)的 )
如果你僅僅按照簡(jiǎn)單情景的去做 的話 是無(wú)效的浆兰。我猜 navigationVC 把 其他的controller 當(dāng)成 自己的屬性一樣在管理休傍, 系統(tǒng)并不能從 屬性里獲得 - (UIStatusBarStyle)preferredStatusBarStyle 的值 一也,你只有在navigationViewcontroller 的 寫才有效 奢人,解決方案就是 把 push 的vc的 - (UIStatusBarStyle)preferredStatusBarStyle 的值 實(shí)時(shí)傳給 NavigationVC
(1)繼承實(shí)現(xiàn) navigationVC 重寫- (UIStatusBarStyle)preferredStatusBarStyle 风纠,并在此方法中返回 當(dāng)前顯示的 VC 的 preferredStatusBarStyle 的值
(2) 寫個(gè)分類 思路一樣
(3)在 navigationVC 重寫(UIViewController*)childViewControllerForStatusBarStyle 此方法是 設(shè)置 一個(gè) 能決定 那個(gè)VC 的preferredStatusBarStyle 有效
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleDefault;
}
- (UIViewController*)childViewControllerForStatusBarStyle
{
if([self.currentVC respondsToSelector:@selector(preferredStatusBarStyle)])
{
return self.currentVC;
}
return nil;
}
3 在 同一個(gè) VC 變換顏色
同樣的實(shí)現(xiàn) - (UIStatusBarStyle)preferredStatusBarStyle 把邏輯寫在此方法里 ,返回不同條件 的 顏色值 薄风,在你條件觸發(fā)的時(shí)候調(diào)用 [VC的實(shí)例或者self setNeedsStatusBarAppearanceUpdate] 就可以 立馬更改顏色