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

Tie*_*eme 11 statusbar ios swift safearealayoutguide iphone-x

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

在此输入图像描述

但我想实现这个目标:

在此输入图像描述

我尝试设置preferredStatusBarStylelightContent但只有在将状态栏后面的背景设置为黑色后才能使用.

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

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
    }
}
Run Code Online (Sandbox Code Playgroud)

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


UPDATE

这是一个可怕的想法,因为:

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

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

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

Kru*_*nal 15

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

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

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

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

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

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

自动版式

在此输入图像描述