今是昨非

今是昨非

日出江花红胜火,春来江水绿如蓝

iOS 狀態列設置

iOS StatusBar 設置#

背景#

最近遇到設置 StatusBar 的問題,在 NavigationController 出來的界面設置 StatusBar 後一直不生效,印象中遇到過此類的問題,但是沒有記錄總結,還是花費了一點時間來找到原因,所以趕緊記錄一下。

全局設置#

StatusBar 的全局設置,需要首先在info.plist中設置View controller-based status bar appearance為 NO,關掉按界面設置 status bar 顯示。

顯示 / 隱藏#

方法一:在 Target 下的 Deployment Info 中不勾選 / 勾選Hide status bar

wecom20210630-151212@2x.png

方法二:代碼設置

[UIApplication sharedApplication].statusBarHidden = YES;

設置#

方法一:在 Target 下的 Deployment Info 中設置Status Bar Style

wecom20210630-151212@2x.png

方法二:代碼設置

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

界面單獨設置#

首先在info.plist中設置View controller-based status bar appearance為 YES,打開按界面設置 status bar 顯示。

普通的 ViewController 設置:

- (UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleDefault;
}

如果是 UINavigaitonController,則需要添加一個繼承自 UINavigationController 的子類,在子類中設置如下代碼,使用子類來控制。或者添加 UINavigaitonController 的 Category,在 Category 中設置如下代碼

原因是:UIViewController 嵌套在 UINavigaitonController 中時,會優先調用 UINavigationController 的preferredStatusBarStyle,所以直接在 UIViewController 中設置是不生效的。


- (UIStatusBarStyle)preferredStatusBarStyle {
    return [self.topViewController preferredStatusBarStyle];
}

- (UIViewController *)childViewControllerForStatusBarStyle {
    return self.topViewController;
}


問題#

modal 出來的 viewController 設置了 prefersStatusBarHidden 不生效的問題,需要設置 modalPresentationCapturesStatusBarAppearance 為 YES;

@implementation TargetViewController

- (instancetype)init {
    self = [super init];
    if (self) {
        self.modalPresentationStyle = UIModalPresentationOverFullScreen;
        self.modalPresentationCapturesStatusBarAppearance = YES;
    }
    return self;
}

- (BOOL)prefersStatusBarHidden {
    return YES;
}

參考#

iOS 開發 - Status Bar 設置彙總

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。