13

默认情况下,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
    }
}

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


更新

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

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

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

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

4

1 回答 1

16

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

我尝试在现有项目中遵循该解决方案,并且效果很好。

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

这是带有结果的示例快照,通过启用或禁用安全区域布局,我测试并实现了。

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

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

自动布局

在此处输入图像描述

于 2017-09-14T14:53:15.177 回答