如何获得一个黑色的状态栏上的iPhone X iOS上的11
问题描述:
默认情况下在iPhone X状态栏看起来是这样的:如何获得一个黑色的状态栏上的iPhone X iOS上的11
但我想实现这一点:
我尝试将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's guidelines明确禁止这样的:
不要嘛sk或特别注意关键显示功能。不要试图隐藏设备的圆角,传感器外壳或 指示灯,通过在屏幕顶部和底部放置黑条来访问主屏幕。不要使用类似于 括号,边框,形状或教学文字的视觉装饰品来呼吁特殊的 注意这些区域。
圆角在视图的顶部看起来不错,但你必须在代码中添加例外,以确保圆角不会对其他的iPhone中。你需要把它放在你的所有ViewController/Storyboard中。这并不是很好。
视图底部的圆角将在屏幕截图中直线显示,但顶部的角落(手动设置)不会。当用户分享你的应用程序时,这会很难看。
答
安全区域布局是解决您的问题的方法。
我试着在我现有的项目中解决方案,它工作正常。
- 将黑色背景颜色(或任何你想要的)设置为视图控制器的主视图。
- 现在添加子视图(带有白色背景)并设置其相对于安全区域布局的约束(或者如果Xcode版本低于9,则遵循顶部和底部布局指南)。
- 将此子视图(以白色背景)作为主视图,并使用它处理进一步的设计。
下面是结果示例快照,通过启用或禁用安全区域布局,我测试和实施。
仅供参考:在这些快照中,主视图具有红色背景,子视图具有蓝色背景色。
自动版式
安全区域已经引起一大堆的麻烦向后兼容,这只是将是燃料在火。 – Annjawn