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

13

默认情况下,iPhone X 的状态栏看起来像这样:

enter image description here

但我想实现这个效果:

enter image description here

我尝试将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
    }
}

我在想这是否是最好的方法...一定有更好的方法来实现这个目标。


更新

这是一个糟糕的想法,因为:

不要遮盖或特别强调关键的显示特征。 不要试图通过在屏幕顶部和底部放置黑色条来隐藏设备的圆角、传感器壳或访问主屏幕的指示器。也不要使用视觉装饰物,如括号、镶边、形状或指导性文本,来特别强调这些区域。

  • 视图顶部的圆角可能看起来很好,但您将需要添加代码异常处理,在其他iPhone上不显示圆角。你需要在所有的ViewControllers / Storyboards中加入这个异常处理.. 这并不是很好。

  • 视图底部的圆角在截图中会呈现直线,但手动设置的顶部圆角则不会。当用户分享您的应用时,这将变得很丑陋。


1
安全区域已经在向后兼容性方面引起了很多麻烦,这只会火上浇油。 - Anjan Biswas
1个回答

16

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

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

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

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

附注:在这些快照中,主视图具有红色背景,子视图具有蓝色背景。

安全区域布局: enter image description here

自动布局

enter image description here


谢谢!我更新了我的问题,也许这不是一个好主意。但为了继续练习:这比使用代码稍微好一点,但你仍然需要为每个视图控制器重复这个过程...不理想吧? - Tieme
我创建了一个IBDesignable自定义视图接口类并使用了它。你和你的方法是完全正确的,这可能需要为每个视图控制器手动练习。但是,手动完成这项工作并不会很困难。此外,这个想法可以控制你的界面区域,超出苹果指南中的限制。在这个阶段,直到我们找到永久解决方案,这可能是一个好的选择。祝你有美好的一天 :) - Krunal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接