Swift - 更改刘海屏设备上的状态栏颜色

2024-03-01

我知道这个问题已经被问过并回答了很多,但我似乎无法让它发挥作用。

我有一个带有全尺寸 WKWebView 的 UIViewController 。一切工作正常,除了状态栏在刘海设备上看起来不合适。 问题是,没有任何效果,即使是我自己来自其他应用程序的代码。

到目前为止我尝试过的事情(这在另一个应用程序中工作得很好......):

if #available(iOS 13, *)
        {
            let statusBar = UIView(frame: (UIApplication.shared.windows.filter {$0.isKeyWindow}.first?.windowScene?.statusBarManager?.statusBarFrame)!)
            //statusBar.backgroundColor = UIColor(red: 242/255, green: 242/255, blue: 242/255, alpha: 1.0)
            statusBar.backgroundColor = UIColor.red
            UIApplication.shared.windows.filter {$0.isKeyWindow}.first?.addSubview(statusBar)
        }
        else
        {
            let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
            
            if statusBar.responds(to:#selector(setter: UIView.backgroundColor))
            {
                statusBar.backgroundColor = UIColor(red: 242/255, green: 242/255, blue: 242/255, alpha: 1.0)
            }
        } 

和这个:

extension UIApplication {

    var statusBarUIView: UIView? {

        if #available(iOS 13.0, *) {
            let tag = 3848245

            let keyWindow: UIWindow? = UIApplication.shared.windows.filter {$0.isKeyWindow}.first

            if let statusBar = keyWindow?.viewWithTag(tag) {
                return statusBar
            } else {
                let height = keyWindow?.windowScene?.statusBarManager?.statusBarFrame ?? .zero
                let statusBarView = UIView(frame: height)
                statusBarView.tag = tag
                statusBarView.layer.zPosition = 999999

                keyWindow?.addSubview(statusBarView)
                return statusBarView
            }

        } else {

            if responds(to: Selector(("statusBar"))) {
                return value(forKey: "statusBar") as? UIView
            }
        }
        return nil
      }
}

一切都来自这里:

如何更改iOS 13状态栏背景颜色和文字颜色? https://stackoverflow.com/questions/56651245/how-to-change-the-status-bar-background-color-and-text-color-on-ios-13

iOS 13 更改状态栏颜色? https://stackoverflow.com/questions/60519792/change-status-bar-color-in-ios-13

如何在 Swift 3 中设置状态栏样式 https://stackoverflow.com/questions/38740648/how-to-set-status-bar-style-in-swift-3

甚至尝试从 WKWebView 中显示的我的网页执行此操作:https://itnext.io/make-your-pwas-look-handsome-on-ios-fd8fdfcd5777 https://itnext.io/make-your-pwas-look-handsome-on-ios-fd8fdfcd5777

解决该问题的唯一解决方法是更改​​主视图的背景颜色。 问题是,这也会改变底部的颜色。

我什至尝试弄乱 info.plist 文件中的样式。

对我所缺少的有什么想法吗?


您可以将其添加到控制器中,然后检查 hasNotch

extension UIDevice {
    /// Returns `true` if the device has a notch
    var hasNotch: Bool {
        guard #available(iOS 11.0, *),
              let window = UIApplication.shared.windows.first(where: { $0.isKeyWindow }),
              window.safeAreaInsets.bottom >= 10 else {
            return false
        }
        
        return true
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift - 更改刘海屏设备上的状态栏颜色 的相关文章

随机推荐

  • 在 CSV 导出中输出列标题

    我有一个导出到 csv 文件的查询 它工作得很好 唯一我不明白的是我还需要导出列标题 并将它们显示为全名 用户名 标志和原因 下面是代码 它可以很好地导出所有行 但我不确定如何导出受尊重的行上方的列标题 header Content typ
  • 如何让 ocaml 相信两个函子实例化是相等的

    假设我有许多模块 它们都使用一种模块类型进行参数化 并且彼此之间也具有依赖关系 module type AT sig end module B A AT struct module Hash struct type t int let eq
  • 调试 R 中的通用函数

    如何调试通用函数 使用 debug 或调试包中的 mtrace 举个例子 我想调试 NADA 包中的 cenreg 特别是采用公式输入的方法 您可以像这样检索方法详细信息 library NADA getMethod cenreg c fo
  • 在 iPhone 上用手指画直线

    背景 我正在尝试创建一个非常简单的 iPhone 应用程序 允许用户用手指在屏幕上绘制多条直线 我在我的程序中使用这两种方法UIViewController捕获每条线端点的坐标 void touchesBegan NSSet touches
  • 通过 Retrofit 将图像文件从 Android 发送到 Spring

    我正在尝试通过 Spring 将 Image 通过 Retrofit 上传到 S3 所以 这基本上是两个任务 将图像传递给 Spring API 从 Spring API 将其上传到 S3 服务器 我知道如何将图像上传到 S3 并且工作正常
  • Xcode 9 中未检测到 GoogleMobileAds (Admob) 框架 - 链接器错误

    我收到引用自的链接器错误 GADInterstitial 架构arm64的未定义符号 我使用最新的admob框架GoogleMobileAdsSdkiOS 7 24 0 请参阅附图 如何修复 iOS 11 的问题 这是 Xcode 9 的错
  • 是否可以在进程运行时停止 libxml 解析器?

    我正在使用 libxml 解析器来快速下载和显示 我的问题是在某些情况下我需要在解析器处理时停止它 可以做吗 你们能给我建议吗 提前致谢 塞卡尔 贝塔拉姆 SAX2 libxml2 API 具有xmlStopParser 在这种情况下可能有
  • 当 TabBarView 子项滚动时使 SliverAppBar 可滚动

    我的主屏幕带有底部导航 由两个项目组成 其中所有项目都有 ListView 和无限列表 并且我希望当用户在其中一个列表中滚动时 SliverAppBar 可以滚动 这是我到目前为止所拥有的 class HomeScreen extends
  • 在 Java 中从 Windows 1252 转换为 UTF8:使用 CharsetDecoder/Encoder 处理空字符

    我知道这是一个非常普遍的问题 但我变得很生气 我使用了这段代码 String ucs2Content new String bufferToConvert inputEncoding byte outputBuf ucs2Content g
  • pyglet:按下按钮时更改精灵实例的图像

    此代码显示图像assassin1 png在黑色背景上 一旦我按下按键 图像就会向右移动 一旦松开按键 图像就会停止移动 一旦我按下该键 它也应该更改为图像assassin2 png当我松开按键时 它应该变回assassin1 png 然而
  • onStop() 触发时我必须保留 Activity 数据吗?

    我找到了有关的官方文档活动生命周期 http developer android com training basics activity lifecycle stopping html不清楚 它充满了诸如此类的词should and mi
  • 如何使用 webdriver 获取文本区域的文本内容?

    我正在尝试获取 a 的内容textarea http www w3 org TR html4 interact forms html h 17 7在 HTML 表单中使用Python 中的网络驱动程序 http code google co
  • 从 wp7 启动另一个应用程序

    我想将一组启动器放置到我的应用程序中的一系列应用程序中 有没有办法在单击图标时从 Windows Phone 7 启动另一个应用程序 如果这是不可能的 是否有办法在我的应用程序中嵌入其他应用程序的启动器以达到相同的结果 No 没有办法如何在
  • VB.NET 中的 ToString 与 ToString()

    在 VB NET 中使用 ToString 和 ToString 有什么区别 没有什么 VB NET 允许您排除任何不接受参数的方法上的括号
  • 字符串错误“常量字符串太长”

    有一个10万字符的文本需要显示 如果我将它放入 String 对象中 则会收到错误 常量字符串太长 StringBuffer 对象也是如此 StringBuffer stringBuffer new StringBuffer stringB
  • 通过索引中的部分字符串匹配选择行

    有一个这样的系列 ds Series wikipedia 10 wikimedia 22 wikitravel 33 google 40 google 40 wikimedia 22 wikipedia 10 wikitravel 33 d
  • 如果我单击页面中的任何位置,当模式弹出窗口关闭时重置表单

    我正在使用 Angular 1 3 我在模态弹出窗口中有一个表单 提交表单后 我的模态弹出表单将被重置 如果我单击取消按钮 我的表单也会重置 scope add user function add form if add form vali
  • 如何在 Oracle SQL Developer 中清除存储的替换变量

    假设我有一个查询 SELECT from table1 tr where tr start time lt starttime 当我第一次执行查询时 SQL Developer 提示我输入替换变量 starttime 的值并进行存储 下次运
  • 同一设备的多个 CBPeripheral

    当使用CoreBluetooth框架访问低功耗蓝牙设备时 CBCentralManager http developer apple com library ios documentation CoreBluetooth Reference
  • Swift - 更改刘海屏设备上的状态栏颜色

    我知道这个问题已经被问过并回答了很多 但我似乎无法让它发挥作用 我有一个带有全尺寸 WKWebView 的 UIViewController 一切工作正常 除了状态栏在刘海设备上看起来不合适 问题是 没有任何效果 即使是我自己来自其他应用程