设置 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
时,我保存了错误的一个以保持不变。如果我去掉这条线,事情就会按预期工作。但是,我确实需要它是overCurrentContext
或overFullScreen
,因为我需要呈现的视图是半透明的并在下面显示视图。
我有一个问题,出现在 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)的主要内容,如果未能解决你的问题,请参考以下文章
短视频运营短视频剪辑 ⑤ ( 视频素材使用 | 设置插入后的视频素材属性 | 设置画面 | 设置音频 | 设置变速 | 设置动画 | 设置调节 )
SeeMusicMIDI 编辑功能 ( 速度设置 | SoundFont 音源设置 | 混响强度设置 | 混响时间设置 | 力度增益设置 | 实时 MIDI 设置 )