iOS原生项目启动时出现短暂黑屏

最近新写了一个swift的app,写完后发现,应用启动时,显示完启动页后,出现了短暂的黑屏之后,才显示了根页面。

一、问题排查

一开始我以为是SceneDelegate导致的,于是我新建了一个项目,用空ViewController作为根页面,试验结果是不会出现黑屏情况,然后我到自己原项目进行一步步排查,最后发现原因在这里:

DispatchQueue.main.async {
        let nav = UINavigationController(rootViewController: vc)
        nav.setNavigationBarHidden(true, animated: false)
        keyWindow.rootViewController = nav
}
keyWindow.makeKeyAndVisible()

问题就是这里的DispatchQueue.main.async,把这个去掉就不会出现黑屏了。

二、总结

DispatchQueue.main.async会导致 rootViewController 的替换,被延迟到下一次 RunLoop 执行,导致在应用启动的第一个时刻,UIWindow没有内容可以渲染,于是系统显示了一个默认的黑屏。

记录一下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容