自定义UINavigationController的状态栏背景

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义UINavigationController的状态栏背景相关的知识,希望对你有一定的参考价值。

我想要一个带有白色文字的黑色状态栏。我使用的一般方法是使用灯光样式状态栏来创建自定义黑色视图并将其添加到视图控制器的顶部

CGFloat statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, statusBarHeight)];
view.backgroundColor = [UIColor blackColor];
[self.view addSubview:view];

如果视图控制器嵌入在导航控制器中我做

CGFloat statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, -statusBarHeight, [UIScreen mainScreen].bounds.size.width, statusBarHeight)];
view.backgroundColor = [UIColor blackColor];
[self.navigationController.navigationBar addSubview:view];

然而,这似乎不是一个非常优雅的解决方案,也许有更好的方法?

答案

通过在keywindow上添加视图可以实现的一种方法。您的应用程序是在UINavigationController下运行还是在UIViewController下运行并不重要。我通过扩展UIStatusBarStyle来做到这一点,如下所示。

extension UIStatusBarStyle {
    static func setbackground()  {
        let view  = UIView.init(frame: UIApplication.shared.statusBarFrame)
        view.backgroundColor = UIColor.black
        UIApplication.shared.keyWindow?.addSubview(view)
    }
}

现在从方法didFinishLaunchingWithOptions在appdelegate中调用此方法。

UIStatusBarStyle.setbackground()

另外,请确保在您设置的info.plist文件中

View controller-based status bar appearance = NO
Status bar style = Opaque black style

以上是关于自定义UINavigationController的状态栏背景的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义 UINavigationController?

带有自定义 NavigationBar 的 UINavigationController

UINavigationController 自定义模态过渡,导航栏太小

iPhone - UINavigationController - 使用 CATransaction 自定义动画

如何测试自定义 UINavigationController 行为

为 UINavigationController 制作自定义后退按钮