设置 window.rootViewController 并在顶部显示一个视图控制器显示一个空白屏幕(iOS 12)

Posted

技术标签:

【中文标题】设置 window.rootViewController 并在顶部显示一个视图控制器显示一个空白屏幕(iOS 12)【英文标题】:Setting window.rootViewController with a presented view controller on top shows a blank screen (iOS 12) 【发布时间】:2020-02-21 20:36:33 【问题描述】:

编辑:我认为潜在的问题是 VC 的呈现方式:

VC.modalPresentationStyle = .overCurrentContext

这导致UITransitionView 和我的导航控制器处于视图层次结构的同一级别,因此当我保存window.rootViewController 时,我保存了错误的一个以保持不变。如果我去掉这条线,事情就会按预期工作。但是,我确实需要它是overCurrentContextoverFullScreen,因为我需要呈现的视图是半透明的并在下面显示视图。


我有一个问题,出现在 ios 12 但不是 13,我的应用程序在设置后没有显示我的根视图控制器。

在另一个嵌入导航控制器的视图控制器之上有一个视图控制器。

在某一时刻会执行以下逻辑(或多或少):

var savedVC: UIViewController

...

savedVc = window.rootViewController
window.rootViewController = <...>

<some business logic here...>

UIWindow window = UIApplication.shared.keyWindow!
window.rootViewController = savedVc

最后,我的视图层次结构只包含呈现的视图控制器。

然而导航控制器仍然是窗口的rootViewController!

如果我关闭这个视图控制器,应用程序会显示一个空白屏幕。在 iOS 13 上,这按预期工作,我可以在所提供的控制器下看到控制器。

【问题讨论】:

实际上在 13 上,呈现的视图控制器在设置 rootviewcontroller 后消失了(请参阅我在***.com/questions/59956631/… 上的上一个问题)但这既不在这里也不在那里,我可以将呈现的视图保存在变量中并呈现重新设置window.rootViewController 后再次设置 【参考方案1】:

问题是导航控制器 试试这个

let story = UIStoryboard(name: "Main", bundle:nil)
let vc = story.instantiateViewController(withIdentifier: "NewViewController") as! NewViewController
UIApplication.shared.windows.first?.rootViewController = vc
UIApplication.shared.windows.first?.makeKeyAndVisible()

【讨论】:

以上是关于设置 window.rootViewController 并在顶部显示一个视图控制器显示一个空白屏幕(iOS 12)的主要内容,如果未能解决你的问题,请参考以下文章