【发布时间】:2018-02-23 14:40:17
【问题描述】:
默认情况下,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
}
}
我想知道这是否是最好的方法.. 必须有更好的方法来实现这一点。
更新
这是一个糟糕的主意,因为:
- 正如@Moritz 指出的那样,Apple's guidelines 明确禁止这样做:
不要掩盖或特别注意关键显示功能。不要试图隐藏设备的圆角、传感器外壳或 用于访问主屏幕的指示器,通过在 屏幕的顶部和底部。不要使用视觉装饰,例如 方括号、边框、形状或说明性文字以称为特殊 也请注意这些领域。
视图顶部的圆角可能看起来不错,但您必须在代码中添加例外以确保圆角不会显示在其他 iPhone 上。你需要把它放在你所有的 ViewControllers / Storyboards 中。这不是很好。
视图底部的圆角将在屏幕截图中直接显示,但顶部的角(手动设置)不会。当用户共享您的应用程序时,这将是丑陋的。
【问题讨论】:
-
安全区域已经在向后兼容方面造成了很多麻烦,这只会火上浇油。
标签: ios swift statusbar iphone-x safearealayoutguide