如何在设备的前台应用程序中显示双高绿色状态栏(通话中)?

How to show double height green statusbar (In-Call) in foreground app on device?

这里有很多问题要求在后台显示红色录音条。很明显,我应该为此使用 AVAudioSession 类别 AVAudioSessionCategoryPlayAndRecord。我的问题是,当我的应用程序中正在进行 VOIP 通话时,如何在前台应用程序中显示绿色的通话中栏(或至少是红色栏)?所以我可以 return 调用 UI 点击状态栏区域,就像 Whatsapp 或 Skype 一样。

我已经尝试过的:

使用 pjsip 进行通话。我还可以尝试增加状态栏高度,将所有 UI 向下移动吗? 有没有标准的方法可以做到这一点,或者我应该通过调整根 UIWindow 的大小并在状态栏下设置另一个绿色 UIWindow 来自己破解它?


编辑: 由于没有找到标准方法的答案,因此接受了@roman-ermolov 的答案。对于那些要寻找答案的人,我可能会建议您自己做几个选择:

  1. 将根 viewcontroller 包裹在容器中,例如 Apple's iAdSuite with Storyboards example. Take a look at my sample project。可能是制作该酒吧的最佳方式。
  2. Hack UINavigationBar 高度(参见 this 方法)- 尚不适用于横向,但可能已解决
  3. 自己控制主要的 UIWindow 框架,在状态栏下放置另一个 UIWindow 所需的内容。

我调查了这两个应用程序(WhatsApp 和 Skype),了解到它们使用自己的 UIView 来实现此功能。

这是 Skype:

这里是WhatsApp(Reveal无法获取真实截图,但传达了基本思想):

在这两个应用程序中,它是一个从屏幕顶部开始的 UIView 以及用于格式化输出文本/句柄触摸的几种方法。

苹果在iOS10推出CallKit.framework,但是好像也没有那种功能,只能自己动手了

Roman Ermolov 的回答解释说,一些应用程序使用自己的 UIView 来实现此功能,但没有解释如何使用。在我看来,你有几个选择。

如果您想将视图放置在当前视图控制器之上(并覆盖),您可以使用 UILabel 或您自己的 UIWindow 创建一个 UIView 并添加作为您的应用程序的子视图 keyWindow.

要让视图保持在顶部而不覆盖视图控制器的内容,您可以采用与上述相同的方法并手动调整应用程序 window 或 window 的根视图控制器的大小当您添加呼叫栏子视图时。或者,您可以创建一个 UIViewController 基础 class,其中包含此调用栏子视图和视图高度约束的出口。此约束的默认值应为零。然后,在拨打电话时,将高度限制更改为所需的回叫高度。这种约束方法也可能适用于应用程序的 UIWindow,但我不太熟悉在应用程序的 window.

上使用约束