自定义UINavigationController的状态栏背景

问题描述 投票:1回答:1

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

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

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

ios objective-c iphone uinavigationcontroller
1个回答
2
投票

通过在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
© www.soinside.com 2019 - 2024. All rights reserved.