今是昨非

今是昨非

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

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;
}

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

原因是:UIViewController 嵌套在 UINavigationController 中時,會優先調用 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 設定彙總

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