自定义UINavigationController的状态栏背景

时间:2017-12-25 12:12:46

标签: ios objective-c iphone 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];

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

1 个答案:

答案 0 :(得分:2)

您可以通过在关键窗口添加视图来实现此目的。您的应用程序是在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)
    }
}

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

UIStatusBarStyle.setbackground()

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

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