如何在 iOS 13 中以编程方式隐藏和显示状态栏?

2024-04-17

我制定了以下隐藏和再次显示状态栏的常用方法。它在 iOS 13 之前工作正常,但当我在 iOS 13 或更高版本的设备上运行它时,我遇到了崩溃。

+(void)showStatusBar:(BOOL)show
{
    UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];

    if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
        [[UIApplication sharedApplication] setStatusBarHidden:!show withAnimation:UIStatusBarAnimationNone];
    }
}

iOS 13 出现以下错误

由于未捕获的异常而终止应用程序 'NSInternalInconsistencyException',原因:'应用程序调用 -statusBar 或 UIApplication 上的 -statusBarWindow:必须更改此代码,因为不再有状态栏或状态栏窗口。使用 而是窗口场景上的 statusBarManager 对象。

如何仅隐藏和显示某些视图控制器的状态栏?


如果您想在不同的视图控制器上显示/隐藏状态栏,您需要:

  1. Add 查看基于控制器的状态栏外观Info.plist 中的选项并将其设置为YES
  2. 覆盖var prefersStatusBarHidden: Bool在每个您想要显示/隐藏状态栏的视图控制器中
override var prefersStatusBarHidden: Bool { 
  return true 
} 

如果您想动态显示/隐藏它(例如,点击按钮后),您可以执行以下操作:

var statusBarHidden = true {
  didSet {
    setNeedsStatusBarAppearanceUpdate()
  }
}

override var prefersStatusBarHidden: Bool { 
  return statusBarHidden 
}
  • 您可以在这里找到更详细的解释Here https://medium.com/@craiggrummitt/the-mysterious-case-of-the-status-bar-d9059a327c97

  • 也在苹果文档 https://developer.apple.com/documentation/uikit/uistatusbarmanager for UIStatusBarManager你可以找到以下引用:

您不使用该对象来修改状态栏的配置。相反,您可以为每个 UIViewController 对象单独设置状态栏配置。例如,要修改状态栏的默认可见性,请覆盖视图控制器的prefersStatusBarHidden属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 iOS 13 中以编程方式隐藏和显示状态栏? 的相关文章

随机推荐

  • Babel 配置错误:当前未启用对实验语法“jsx”的支持

    我正在尝试用 Jest 为我的单元测试reactjs项目 当我想测试组件的渲染时 出现以下错误 SyntaxError Users jk EpitechProjects T WEB 700 CountOfMoney 18 front src
  • Microsoft Graph - 对 CalendarView 使用多个筛选器时出错

    我尝试得到一个CalendarView由两者过滤sensitivity and lastModifiedDateTime 但是当同时应用两个过滤器时 图形 API 会失败 如果我一次使用一个过滤器运行查询 它会按预期工作 经过测试 我发现是
  • 如何使用 mod_write 从 url 中删除 index.php,同时仍然允许 php 看到其中包含 index.php 的路径?

    在过去的三天里 我一直在使用 Apache 的 mod rewrite 试图让它从我的 url 中删除 index php 而 php 仍然需要在路径中看到它 Essentially PHP needs to see this http e
  • 如何查看手机时间格式是否设置为24小时? [复制]

    这个问题在这里已经有答案了 我正在 Swift 2 中构建一个闹钟应用程序 我似乎找不到一个合适的方法来确定手机是否设置为 24 小时时间 此外 我无法将模拟器更改为 24 小时工作 因此我什至无法通过调整时间设置来测试一些替代方案 有任何
  • 如何在QWebEngineView中指定用户代理

    我正在使用 PyQt5 在网页上实现自动化功能 PyQt5 中显示的页面与 Chrome 中显示的页面有很大不同 如果我要更改用户代理 我可以模仿 Chrome 的功能吗 如果是这样 我将如何更改以下示例中的用户代理 import sys
  • h:button 和 h:commandButton 之间的区别

    在 JSF 2 中 有什么区别h button and h commandButton
  • 在 Javascript 变量中存储密码有哪些安全隐患?

    我正在开发一个需要良好安全性的网络应用程序 在目前的设计中 许多用户操作需要用户重新发送密码 否则服务器将不得不以纯文本形式存储密码 至少暂时如此 许多用户交互是通过 AJAX 请求进行的 我不想让用户重新输入每个密码 而是想做这样的事情
  • 有谁知道即使页面已刷新,如何保留 Javascript 变量?

    Example 在主页中单击一个按钮 新 然后页面将使用 Javascript 在新窗口中打开新页面 调用重定向 Page 在主页中单击一个按钮 退出 然后页面然后会调用 确认退出 然后 closeChildWindows 关闭所有 在重定
  • 什么算作失败?

    假设我有一个伪 C 程序 For i 0 to 10 x a 2 x 5 next 30 FLOPS 的 FLOP 数量是 1 x 1 x 5 1 2 x 5 10 loop 吗 我很难理解什么是失败 请注意 指示我从何处获取 操作 计数
  • 在 PHP 中生成独特的组合

    我需要从给定的数据集 n 个数字 生成唯一的组合 每个组合都包含 r 值 基本上希望实施C n r n r n r PHP 中的公式 输入数据集 A B C D 并需要 3 个值的唯一组合 如下所示 C n r C 4 3 4 3 4 3
  • 如何在Java中使绘制的图像透明

    我让动画在我的 蛇克隆游戏 中发挥作用 但基于图片的问题是图像没有透明度 注意圆形图片的白色背景 编程方面 是否有解决方案能够使这些绘制的图像包含透明度 这是一张包含我的代码和程序输出的图片 附 顺便说一句 我决定粘贴直接链接而不是 IMG
  • Grails 命令对象:如何将 request.JSON 加载到其中?

    Question 有没有办法使用 request JSON 数据进行自动命令对象绑定 在我的 grails 控制器中给出这个简单的 Command 对象 class ProfileCommand int id String companyN
  • 从匿名类调用新定义的方法

    我实例化了一个匿名类的对象 并向其中添加了一个新方法 Date date new Date public void someMethod 我想知道是否可以从外部调用此方法 类似于 date someMethod 好问题 答案是否定的 您不能
  • 2015年如何从lfd安装mod_wsgi

    我如何从 lfd 网站安装 mod wsgi 因为它有轮扩展 每当我搜索如何在 wamp 上安装 mod wsgi 时 资源都会告诉我从该网站安装二进制文件 然后将 mod wsgi so 文件保留在我的 wamp 目录中 lfd 页面上有
  • 如何为nodejs生成调用图?

    跟进如何为给定的 JavaScript 生成调用图 https stackoverflow com questions 10182387 它被关闭了 因为它需要关注 只有一个问题 所以这是我的重点 如何为我的 Node js Javascr
  • Flex:获取自己的 SWF 文件名?

    有没有办法以编程方式确定我的类正在运行的 swf 文件名 Thanks Stage http livedocs adobe com flex 3 langref flash display Stage html has a 加载器信息 ht
  • 如何使用 --timid 标志来覆盖鼻子

    我想使用运行 nosetests with coverage 内德 巴切尔德 Ned Batchelder 的报道模块 http nedbatchelder com code coverage 但将 timid 标志传递给覆盖模块 有没有办
  • 如何轻松编写克隆方法?

    我有一个带有虚拟克隆新方法的基类 class A virtual A cloneNew const return new A 及其衍生物 class A1 public A virtual A1 cloneNew const return
  • 观察 NSUserDefaults 键的值更改

    我对保存在 NSUserdefaults 中的特定键的值变化感兴趣 然而 我所拥有的并不适合我 observeValueForKeyPath 不会被触发 更新 我想我已经发现了这个问题 如果我使用字符串 而不是使用定义的常量 那么它就会被触
  • 如何在 iOS 13 中以编程方式隐藏和显示状态栏?

    我制定了以下隐藏和再次显示状态栏的常用方法 它在 iOS 13 之前工作正常 但当我在 iOS 13 或更高版本的设备上运行它时 我遇到了崩溃 void showStatusBar BOOL show UIView statusBar UI