我的主要任务是使屏幕与非透明视图重叠,以在应用程序进入背景时隐藏信息。官方解决方案描述为here。
问题是有时在iOS 13上不起作用。
我找到了这个article:
它解释了sceneDidBecomeActive(_:)
和sceneWillResignActive(_:)
的工作方式。但是新项目有AppDelegate
+ SceneDelegate
,旧项目只有AppDelegate
。我可以只使用applicationDidBecomeActive(_:)
和applicationWillResignActive(_:)
吗?还是我应该以某种方式迁移项目以使用UISceneDelegate
(iOS 12和更早版本不支持此功能)?
如果您在Xcode 11之前创建了一个应用程序,则它不支持场景。只要您不添加任何与场景相关的内容(Apple将来可能会禁止),您的应用程序的生命周期将在iOS 13下继续正常运行,就像在iOS 12及更低版本中一样。只需继续使用UIApplicationDelegate方法即可。
[如果您有一个支持iOS 12和iOS 13的应用程序,并且您正在iOS 13中使用场景,则必须同时实现applicationWillResignActive
(支持iOS 12和更早版本)和sceneWillResignActive
(支持iOS 13)及更高版本)。
实际上,在同时支持iOS 12和13的应用程序中,您基本上需要同时实现UIApplicationDelegate
和UISceneDelegate/UIWindowSceneDelegate
方法集。当您的应用程序在装有iOS 12或更低版本的设备上运行时,将调用UIApplicationDelegate
方法;而当您的应用程序在装有iOS 13或更高版本的设备上运行时,将调用UISceneDelegate/UIWindowSceneDelegate
方法。
请记住,在iOS 13下,如果您支持多个窗口/场景,则场景委托方法与特定场景相关联。