如何在 iOS 11 上的 iPhone X 上获得黑色状态栏
Posted
技术标签:
【中文标题】如何在 iOS 11 上的 iPhone X 上获得黑色状态栏【英文标题】:How to get a black statusbar on iPhone X on iOS 11 【发布时间】: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 中。这不是很好。
视图底部的圆角将在屏幕截图中直接显示,但顶部的角(手动设置)不会。当用户共享您的应用程序时,这将是丑陋的。
【问题讨论】:
安全区域已经在向后兼容方面造成了很多麻烦,这只会火上浇油。 【参考方案1】:安全区域布局可以解决您的问题。
我尝试在现有项目中遵循该解决方案,并且效果很好。
将黑色背景颜色(或任何您想要的颜色)设置为视图控制器的主视图。 现在添加子视图(白色背景)并设置其相对于安全区域布局的约束(如果 Xcode 版本低于 9,则遵循顶部和底部布局指南)。 将此子视图(白色背景)视为主视图并使用它进行进一步设计。这是带有结果的示例快照,通过启用或禁用安全区域布局,我测试并实现了。
仅供参考:在这些快照中,主视图具有红色背景,子视图具有蓝色背景。
安全区域布局:
自动布局
【讨论】:
谢谢!我更新了我的问题,也许这毕竟不是一个好主意。但要继续练习:这比用代码做的要好一些,但你仍然需要为每个视图控制器重复这个..不理想对吧? 我创建了一个 IBDesignable 自定义视图接口类并使用了相同的.. 你和你的方法是绝对正确的,这可能需要对每个视图控制器进行手动练习。但这不会很难手动完成。而且,这个想法可以控制你的界面区域,超出了苹果在其指导方针范围内的限制。在这个阶段,直到我们找到永久的解决方案,这可能是一个很好的解决方案。祝你有美好的一天:)以上是关于如何在 iOS 11 上的 iPhone X 上获得黑色状态栏的主要内容,如果未能解决你的问题,请参考以下文章
iOS 11 Swift 4 iPhone X Safe Area 支持全屏ScrollView
如何在 iOS 11 和 iPhone X 上实现隐藏 UITabBar 以显示 UIToolbar
如何在 OS X 上的 iPhone 4 模拟器中测试我的应用程序?