UIViewController 通话中状态栏问题

2024-04-20

Issue:

通话状态栏消失后,模态呈现的视图控制器不会向上移动,在顶部留下 20px 的空白/透明空间。


正常:没有问题


通话中:没有问题


通话中消失后:

在顶部留下 20 像素高的空白/透明空间,显示下面的橙色视图。但是状态栏仍然存在于透明区域上方。导航栏还为状态栏留出了空间,只是位置太低了 20 像素。


  • 基于 iOS 10
  • 模态呈现的视图控制器
  • 自定义模态呈现
  • 主视图控制器后面是橙色的
  • 不使用自动布局
  • 当旋转到景观, 20px In-Call Bar 离开并且仍然留下 20px 间隙。
  • 我选择不以横向显示状态栏。 (即大多数库存应用程序)

我尝试听应用程序代表:

willChangeStatusBarFrame
didChangeStatusBarFrame

另请查看基于控制器的通知:

UIApplicationWillChangeStatusBarFrame
UIApplicationDidChangeStatusBarFrame

当我记录上述所有四种方法的呈现视图的框架时,框架始终位于 (y: 0) 原点。


Update

视图控制器自定义模态演示

    let storyboard = UIStoryboard(name: "StoryBoard1", bundle: nil)
    self.modalVC = storyboard.instantiateViewController(withIdentifier: "My Modal View Controller") as? MyModalViewController
    self.modalVC!.transitioningDelegate = self
    self.modalVC.modalPresentationStyle = .custom
    self.modalVC.modalPresentationCapturesStatusBarAppearance = true;
    self.present(self.modalVC!, animated: true, completion: nil)


    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        let containerView = transitionContext.containerView
        let fromViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from)
        let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)
        toViewController!.view.transform = CGAffineTransform(scaleX: 0.001, y: 0.001)

        UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.0, options: [.curveEaseOut], animations: { () -> Void in

            toViewController!.view.transform = CGAffineTransform.identity

        }, completion: { (completed) -> Void in

           transitionContext.completeTransition(completed)

        })
 }

我已经寻找解决方案三天了。我不喜欢这个解决方案,但没有找到更好的方法来解决它。

当 rootViewController 视图的高度比窗口高 20 点时,我遇到了这种情况,当我收到有关状态栏高度更新的通知时,我手动设置正确的值。

将方法添加到 AppDelegate.swift

func application(_ application: UIApplication, didChangeStatusBarFrame oldStatusBarFrame: CGRect) {
        if let window = application.keyWindow {
            window.rootViewController?.view.frame = window.frame
        }
    }

之后它会按预期工作(即使在方向改变之后)。 希望它会对某人有所帮助,因为我在这方面花了太多时间。

附:它会闪烁一点,但可以工作。

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

UIViewController 通话中状态栏问题 的相关文章

  • MKMapView 未在平移上调用 RegionDidChangeAnimated

    我有一个带有 MKMapView 的应用程序和每次地图更改位置 在 RegionDidChangeAnimated 中 时调用的代码 当应用程序最初加载时 在显式更新地图坐标的平移 滑动 捏合 点击和按钮上调用regionDidChange
  • 来自 Popover 的 UIActionSheet 和 iOS8 GM

    有人在尝试从弹出窗口显示 UIActionSheet 时收到此消息吗 您的应用程序呈现了 UIAlertController 样式的 UIAlertControllerStyleActionSheet 具有此样式的 UIAlertContr
  • 应用程序在后台时远程推送通知 swift 3

    我有一个可以接收远程推送通知的应用程序 我已经实施了didReceiveRemoteNotification这样 func application application UIApplication didReceiveRemoteNoti
  • 检测 iPhone 上的长按

    我正在开发一个 iPhone 应用程序 它要求我检查是否已点击按钮并按住 6 秒 然后触发一个播放某种声音的动作 我应该如何检测这个 6 秒的点击 另一方面 用户还可以持续点击按钮 6 秒 然后会触发相同的操作 我应该如何处理多次点击 我怎
  • 使用 UIActivityViewController 分享视频

    我正在尝试使用默认的苹果共享屏幕将视频分享到 Twitter 和 Facebook 等 我已经让它与图像一起使用 但我不知道如何更改它以与视频一起使用 提前致谢 这是我用来分享照片的代码 IBAction shareButtonPresse
  • 如何让iOS 7下的UISwitch不采用其后面视图的背景颜色?

    关闭时看起来像这样 虽然我更喜欢灰色背景 我真的必须使用 UIImageView 吗 以下是我更改 iOS7 UISwitch 的填充颜色的方法 首先您需要导入 QuartzCore import
  • 滚动 swiftUI 列表时,未调用单元格的任务修改器。怎么修?

    我写了一个异步图像视图 with swiftui 并在列表单元格中使用 AsyncImgView 使用任务修饰符在 Img 出现时从缓存或网络下载 Img 在 iOS16 之前一切正常 但在iOS16我发现当我滚动列表新细胞的AsyncIm
  • Swift:如何获取从字符的开始到最后一个索引的子字符串

    我想学习将一个字符串转换为另一个字符串的最佳 最简单方法 但只有一个子集 从开头开始一直到字符的最后一个索引 例如 将 www stackoverflow com 转换为 www stackoverflow 什么样的代码片段可以做到这一点
  • UITableView:popViewController 并将行索引保留到父控制器中?

    我有以下配置 一个视图控制器父控制器包含一个TableView父表带有自定义单元格 每个单元格显示 2 个标签 一个视图控制器子控制器包含一个TableView子表 当用户单击controllerParent的某个单元格时 会显示此视图 c
  • iOS:无法让蓝牙管理器工作

    警告 我知道私有框架不会在 App Store 中流行 我尝试使用 BluetoothManager 框架来让我 1 检查设备上是否启用了蓝牙 2 如果未启用 则将其打开 我可以按照找到的说明成功加载蓝牙管理器here https stac
  • 通过 iOS 应用程序在 Twitter 上分享视频

    是否可以使用 SLRequest 分享视频 我可以使用相同的方式共享图像 SLRequest postRequest SLRequest requestForServiceType SLServiceTypeTwitter requestM
  • 谷歌分析实时不工作

    我正在使用这段代码来使用Google Analytics为了获取实时信息和应用程序评论 代码位于 AppDelegate 中 GAI sharedInstance trackUncaughtExceptions YES GAI shared
  • 如何判断当前运行的 Apple Watch 尺寸/尺寸是 38 毫米还是 42 毫米?

    我们知道Apple Watch有两种屏幕尺寸 38mm和42mm 这WKInterfaceDevice类提供了一个名为的可读属性screenBounds 我写了一个扩展WKInterfaceDevice 尝试添加一种方法来检测当前设备类型
  • 如何获取UIImage的大小(KB)

    我从以下位置获取图像didFinishPickingMediaWithInfo UIImage originalImage UIImage info valueForKey UIImagePickerControllerOriginalIm
  • ios ScheduledTimerWithTimeInterval 的时间量

    我想使用 ScheduledTimerWithTimeInterval 来执行一定时间的定期任务 比如说一小时 但我如何在我的代码上实现 这是我的代码 timer NSTimer scheduledTimerWithTimeInterval
  • iOS:如何创建并绘制(并保存)大于屏幕的图像?

    我们正在创建一个 iOS 照片应用程序 为此 我们必须创建动态大小的图像 最大约为 2500x1600 像素 创建此图像后 我们希望以相当快的速度在大图像之上绘制较小的图像 正如我们所看到的 问题在于不可能获得大于屏幕分辨率的上下文 该调用
  • 如何快速使用 CoreLocation?

    我尝试过将 CoreLocation 与我的 Swift 应用程序一起使用 但没有运气 我有以下非常简单的代码 我已经链接了 CoreLocation 库 import UIKit import CoreLocation UIApplica
  • 如何使用 NavigationStack 和 SwiftUI 发送额外数据?

    我有三个viewsA B 和 C 用户可以从 A 导航到 B 也可以从 A 导航到 C 用户可以从 B 导航到 C 现在我想区分用户是从 A 到 C 还是从 B 到 C 所以我在寻找如何在 NavigationStack 中传递额外的数据
  • 在 iPad 上使用 OpenCV 避免碰撞

    我正在开展一个项目 需要使用 OpenCV 实现碰撞避免 这是在 iOS 上完成的 iOS 5 及以上版本即可 项目目标 这个想法是将 iPad 安装在汽车仪表板上并启动应用程序 应用程序应该从相机中抓取帧并进行处理 以检测汽车是否会与任何
  • iOS 中的设备兼容性问题

    我们上传了一个应用程序 在第一个版本中 我们添加了设备功能 电话 以限制信息 plist 中的 iPhone 设备 在第二个版本中 我们忘记添加 电话 并提交给了应用商店 我们计划上传第三个版本 其中设备功能为 电话 但在提交到 App S

随机推荐