【发布时间】:2026-02-09 08:30:01
【问题描述】:
我正在主窗口顶部创建一个临时 UIWindow,以显示一些覆盖在我的应用程序其余部分上的少量数据。此信息不应以任何方式影响状态栏。请注意,覆盖窗口可以从非视图控制器上下文启动,这意味着位于主窗口堆栈顶部的当前视图控制器可能不知道覆盖窗口的存在。
不幸的是,一旦我执行overlayWindow.isHidden = false,它就会将状态栏的控制(其样式以及是否隐藏)转移到我的覆盖窗口的根视图控制器,我不知道如何停止它.
或者,我可以只“记住”状态栏的先前状态并让我的覆盖根视图控制器输出这些状态,但似乎没有一个好的方法来找出当前状态和状态的可见性iOS 13 中的 bar,至少它考虑到了使用新工作表效果的模态呈现视图控制器。
我怎样才能让我的覆盖 UIWindow 可靠地不影响状态栏?
编辑:我准备了一个小测试用例:https://github.com/Aquilosion/TestWindowView
测试用例显示了一个视图控制器,它每秒都会更改其状态栏外观。您可以在模式中再次打开相同的视图控制器,尽管它也请求更改状态栏,但 iOS 正确地将状态栏锁定为白色,因为视图控制器在工作表模式下永远不会到达它。当前打开窗口叠加层始终显示黑色状态栏,无论是否存在模式。我尝试将状态栏子项设置为主窗口的根视图控制器的状态栏子项。理想情况下,iOS 会尊重这一点,并在覆盖窗口可见时继续更改状态栏样式。
【问题讨论】:
-
您找到解决方案了吗?遇到完全相同的事情。
-
不是真的,但我认为对于许多用例,您可以创建某种“分层视图控制器”作为窗口的根视图控制器,它本身可以有各种子视图控制器,另外还可以配置它的哪个子视图控制器可以控制状态栏(与视图控制器的顺序不同)。