iOS preferredStatusBarStyle 不執(zhí)行

**前提 **

info.plist?文件中設置 View controller-based status bar appearance 為?YES

UINavgationController中覆寫preferredStatusBarStyle方法不執(zhí)行的問題

#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad

{

? ? [super viewDidLoad];

}-(UIStatusBarStyle)preferredStatusBarStyle

{

? ? return UIStatusBarStyleDefault;

}@end

如果viewController不是在 UINavgationController中,那么以上代碼可以把狀態(tài)欄文本顏色設置為白色,但是如果 viewController是添加到導航上的,你會發(fā)現(xiàn)上面代碼達不到你想要的效果,狀態(tài)欄文本顏色是黑色的!

**這是為什么? **

經過查找資料,才知道原來是這么一回事:

*UINavigationController不會將 preferredStatusBarStyle方法調用轉給它的子視圖,而是由它自己管理狀態(tài),而且它也應該那樣做。因為UINavigationController 包含了它自己的狀態(tài)欄

,因此就算 UINavigationController中的viewController 實現(xiàn)了 preferredStatusBarStyle方法也不會調用 。

那 UINavigationController是怎么決定該返回 UIStatusBarStyleLightContent 還是 UIStatusBarStyleDefault的呢?

它是基于它的 UINavigationBar.barStyle屬性,默認(UIBarStyleDefault)的是黑色文本的狀態(tài)欄,而 UIBarStyleBlack是設置為白色文本的狀態(tài)欄,

也就是說,如果viewController是在導航中的,想要改變狀態(tài)欄文本顏色,那么需要通過代碼:

//? 將status bar 文本顏色設置為白色self.navigationController.navigationBar.barStyle = UIBarStyleBlack;//? 將status bar 文本顏色設置為黑色 ,默認就是黑色self.navigationController.navigationBar.barStyle = UIBarStyleDefault;

另外,如果viewController在導航中,還想通過 preferredStatusBarStyle 方法設置狀態(tài)欄文本顏色,那就只能隱藏導航欄了:

// 隱藏導航欄后 系統(tǒng)會調用 preferredStatusBarStyle 方法self.navigationController.navigationBarHidden = YES;

另外我們也可以主動調用 preferredStatusBarStyle 方法

- (void)viewDidAppear:(BOOL)animated

{

? ? [super viewDidAppear:animated];

? ? // 必須放在 viewDidAppear: 方法里面才起效果(自動調用 preferredStatusBarStyle)? ? // 放在 viewWillAppear: 方法里面不起效果? ? [self setNeedsStatusBarAppearanceUpdate];

}

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容