设置 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)的主要内容,如果未能解决你的问题,请参考以下文章

时钟设置在哪里设置?

QGIS基本设置和项目设置

短视频运营短视频剪辑 ⑤ ( 视频素材使用 | 设置插入后的视频素材属性 | 设置画面 | 设置音频 | 设置变速 | 设置动画 | 设置调节 )

SeeMusicMIDI 编辑功能 ( 速度设置 | SoundFont 音源设置 | 混响强度设置 | 混响时间设置 | 力度增益设置 | 实时 MIDI 设置 )

win10设置里的代理怎么设置

强制恢复出厂设置?