【问题标题】:UIWindow with Alert level is on top of Status Bar level具有警报级别的 UIWindow 位于状态栏级别之上
【发布时间】:2017-06-21 12:39:07
【问题描述】:

我有一个以模态方式呈现视图控制器的应用程序,我在不同的 UIWindows 中有一个标准的 ViewController 和一个 UIAlertController,主窗口具有正常的 UIWindowLevel 优先级,而警报窗口具有 Alert UIWindowLevel 优先级,因为我希望始终将警报放在首位我在主 UIWindow 上以模态方式呈现的任何 ViewController (AppDelegates 参考)。我还有另一个具有状态栏优先级的 UIWindow,当我想确定有一个不同的时候 ViewController 在一切之上。 因此,当我呈现具有警报 UIWIndowLevel 优先级的 UIWindow 并呈现具有状态栏 UIWIndowLevel 的不同窗口后,警报窗口中的警报将显示在状态栏窗口的顶部。有什么原因吗?

An example app screenshot I built to test in

【问题讨论】:

  • 嗯,警报应该是比其他任何事情都更重要的东西,需要用户立即关注。因此,它显示在其他所有内容之上也就不足为奇了。
  • 但是由于 UIAlertController 是一个在窗口之上工作的 ViewController,因此具有不同级别的不同窗口应该覆盖警报 VC。

标签: ios cocoa-touch uiwindow


【解决方案1】:

所以,我正在查看许多打开的 SO 中的一些,并看到了这个答案:https://stackoverflow.com/a/24262942/6784707

我打印的 (UIWindowLevelNormal, UIWindowLevelAlert, UIWindowLevelStatusBar) 的值为 (0.0, 2000.0, 1000.0)。但苹果的文件指出:

UIWindowLevelNormal:UIWindowLevel

默认级别。将此级别用于您的大部分内容,包括应用的主窗口。

UIWindowLevelAlert:UIWindowLevel

警报视图的级别。此级别的窗口出现在 UIWindowLevelNormal 级别的窗口之上。

UIWindowLevelStatusBar:UIWindowLevel

状态窗口的级别。 此级别的窗口显示在 UIWindowLevelAlert 级别的窗口之上

我在 Apple 的 Bug Reporter 中填写了一个错误。

我的解决方案是创建一个价值超过 2000 的 CGFloat 并将其添加到 windowLevel。

【讨论】:

    猜你喜欢
    • 2020-02-25
    • 1970-01-01
    • 2016-03-09
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    相关资源
    最近更新 更多