如何在iOS 11上的iPhone X上获得黑色状态栏

默认情况下,iPhone X上的状态栏如下所示:

在此处输入图像描述

但我想实现这个目标:

在此处输入图像描述

我尝试将preferredStatusBarStyle设置为lightContent但它仅在将状态栏后面的背景设置为黑色后才起作用。

为了修复圆角,我最后添加了另一个圆角的子视图。

 class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .black let roundedView = UIView( frame: CGRect( x: 0, y: UIApplication.shared.statusBarFrame.height, width: view.frame.width, height: view.frame.height ) ) roundedView.layer.cornerRadius = 10 roundedView.layer.masksToBounds = true roundedView.backgroundColor = .white view.addSubview(roundedView) let label = UILabel(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 60)) label.text = "Black statusbar!" label.textAlignment = .center roundedView.addSubview(label) } override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } } 

我想知道这是否是最好的方法..必须有更好的方法来实现这一目标。


UPDATE

这是一个糟糕的主意,因为:

  • 正如@Moritz指出的那样, Apple的指导方针明确禁止这样做:

请勿掩盖或特别注意按键显示function。 不要试图通过在屏幕的顶部和底部放置黑条来隐藏设备的圆角,传感器shell或用于访问主屏幕的指示器。 不要使用括号,边框,形状或教学文本等视觉装饰来特别注意这些区域。

  • 视图顶部的圆角可能看起来不错,但您必须在代码中添加例外以确保其他iPhone上不显示圆角。 您需要将它放在所有ViewControllers / Storyboards中。这不是那么好。

  • 视图底部的圆角将在屏幕截图中显示为直线,但顶部的角(手动设置)则不会。 当用户分享您的应用时,这将是丑陋的。

安全区域布局是您的问题的解决方案。

我尝试在现有项目中使用该解决方案并且工作正常。

  • 将黑色背景颜色(或任何您想要的颜色)设置为视图控制器的主视图。
  • 现在添加子视图(带有白色背景)并相对于安全区域布局设置其约束(如果Xcode版本低于9,则按照顶部和底部布局指南)。
  • 将此子视图(带有白色背景)视为主视图,并使用它进一步设计。

以下是带有结果的示例快照,通过启用或禁用安全区域布局,我进行了测试和实施。

仅供参考:在这些快照中,主视图具有红色背景,子视图具有蓝色背景颜色。

安全区域布局: 在此处输入图像描述

自动版式

在此处输入图像描述