ios - 导航栏隐藏时的样式状态栏

标签 ios swift uikit

我知道使用 UIKit 通常你只需覆盖:

override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }

在您的UIViewController(或UINavigationController,如果存在)中。 它工作得很好。


但是,当我执行此操作时遇到了问题:

navigationController?.setNavigationBarHidden(true, animated: true)

现在,我看不到导航栏,这是预期的并且完全没问题。但是,我看到状态栏带有深色字体,这是意外的(我的导航 Controller 覆盖了上面的属性,并且当导航栏未隐藏时它可以正常工作)。我想看到状态栏,但我希望它是浅色字体。从此时起,导航 Controller 不会监听 preferredStatusBarStyle,因此我无法以这种方式进行设置。

有没有办法在导航栏隐藏时显示.lightContent状态栏样式..?

最终效果在屏幕截图中可见。如果放大,您可以在深色背景上看到深色字母和电池。 Screenshot of dark statusbar on dark background

PS。请不要仅发布有关 SwiftUI(这里我们也支持旧版 iOS)和已弃用内容的答案。

最佳答案

找到了一个解决方案,让SDK在有导航 Controller 并且隐藏导航栏但显示状态栏时询问样式。

UINavigationController子类中,您需要重写

override var childForStatusBarStyle: UIViewController? { return viewControllers.last }

然后在这些 Controller 中,您可以指定

override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }

由于某种原因,如果导航栏隐藏,iOS SDK 不会向导航 Controller 询问 preferredStatusBarStyle。但是,它仍然询问 childForStatusBarStyle 并且我们已经解决了问题:)

关于ios - 导航栏隐藏时的样式状态栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64006532/

相关文章:

iphone - Objective-C静态字段问题

ios - 如何使用删除(_ :) in Swift4 to Removes the selected content from your interface?

ios - 添加到 UIStackView 后如何保留 UIButton 大小

iphone - 如何识别当前哪个文本字段是第一响应者

ios - SplitViewController presentedWithGesture 解决方法 - 最佳解决方案?

iphone - 如何调用 "Turn Off Airplane Mode"通知

swift - 通用 LazyCollection 类型

swift - 有没有办法用 switch 语句测试 OptionSet?

ios - SKSprite 场景的内存问题

iphone - 我是否需要多个开发人员证书才能加入多个开发人员计划?