本文鏈接:https://blog.csdn.net/qq_35951382/article/details/89632114
最近在處理項目中警告⚠️問題
因為項目中導航欄顏色有很多種從而狀態欄就會產生二種
在 iOS 2.0 --> 9.0
###UIStatusBarStyleDefault
###UIStatusBarStyleLightContent
//之前項目設置狀態欄都是這種,但這種在iOS9.0后就被遺棄
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];//'setStatusBarStyle:' is deprecated: first deprecated in iOS 9.0 - Use -[UIViewController preferredStatusBarStyle]
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
1
2
3
因為在iOS9.0就被遺棄了,這些方法會報警告,所以強迫症不用了,根據他的提示用
###preferredStatusBarStyle
@property(nonatomic, readonly) UIStatusBarStyle preferredStatusBarStyle NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; // Defaults to UIStatusBarStyleDefault
1
而且最低支持 iOS 7,用戶手機系統適配方面沒問題.
開始着手用在ViewController 里面用preferredStatusBarStyle
- (UIStatusBarStyle)preferredStatusBarStyle{
NSLog(@"go style");
return UIStatusBarStyleLightContent;
}
1
2
3
4
發現根本狀態欄的顏色沒變,然后打印也沒有走,一臉懵逼.
然后重新創建一個項目,直接寫這個- (UIStatusBarStyle)preferredStatusBarStyle方法發現走了,顏色也變了,再次懵逼了.
是不是跟 setStatusBarStyle 有沖突,於是回憶setStatusBarStyle需要注意的東西,想起之前設置 狀態欄顏色 在info.plist 中 View controller-based status bar appearance 設置為NO 才能改變狀態欄的顏色,把 View controller-based status bar appearance 設置為YES 再跑一變發現走了preferredStatusBarStyle 顏色也變了.
在NavigationController 中寫
//當設置了 childViewControllerForStatusBarStyle 后,不會進入這里
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
//以 topViewController 的 preferredStatusBarStyle 來設置 statusBarStyle
- (UIViewController *)childViewControllerForStatusBarStyle {
return self.topViewController;
}
1
2
3
4
5
6
7
8
9
###當你想改變狀態欄顏色時在ViewController
- (UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
1
2
3
#如果之前在info.plist 中 View controller-based status bar appearance 設置 NO,一定要改為為 YES,如果之前沒有設置就可以不用管,不然preferredStatusBarStyle 不調用