zoukankan      html  css  js  c++  java
  • Xcode 11新建工程.--iOS 13 SceneDelegate适配

    收录文章::::::::::::::: iOS 13 适配要点总结

    在Xcode 11 创建的工程,运行设备选择 iOS 13.0 以下的设备,运行应用时会出现黑屏现象。
    原因:

    Xcode 11 默认是会创建通过 UIScene 管理多个 UIWindow 的应用,工程中除了 AppDelegate 外会多一个 SceneDelegate
    AppDelegate和SceneDelegate这是iPadOS带来的新的多窗口支持的结果,并且有效地将应用程序委托的工作分成两部分。
    也就是说在我们用多窗口开发iPadOS中,从iOS 13开始,您的应用代表应该:

    设置应用程序期间所需的任何数据。
    响应任何专注于应用的事件,例如与您共享的文件。
    注册外部服务,例如推送通知。
    配置您的初始场景。
    相比之下,在iOS 13中的新顶级对象是一个UIWindowScene,场景代表可以处理应用程序用户界面的一个实例。因此,如果用户创建了两个显示您的应用程序的窗口,则您有两个场景,均由同一个应用程序委托支持。
    这些场景旨在彼此独立工作。因此,您的应用程序不再移动到后台,而是单个场景执行 - 用户可以将一个移动到后台,同时保持另一个打开。

    我们可以看下info.plist文件和工程项目文件的变化如图:

    1. Appdelegate新增windows属性

    适配方案一

    如果我们不开发iPadOS多窗口APP,SceneDelegate窗口管理我们可以不需要直接删掉就好了。

    1. 删除掉info.plist中Application Scene Manifest选项,同时,文件SceneDelegate可删除可不删
    2. 相关代码注释掉
    3. Appdelegate新增windows属性

    适配方案二

    即要用iOS 13中新的SceneDelegate,又可以在iOS 13一下的设备中完美运行。那就添加版本判断.

    1. SceneDelegate中添加@available(iOS 13, *)
      1. AppDelegate中同样声明window属性
        1. AppDelegate中两个关于Scene的类也添加版本控制,oc/Swift中可以用扩展单独拎出来
        2. 切记:这种方式,AppDelegate中的有关程序的一下状态的方法,iOS 13设备是不会走的,iOS13一下的是会收到事件回调的。13以上的设备会走SceneDelegate对应的方法
  • 相关阅读:
    设计模式-适配器模式
    设计模式-模板方法模式
    设计模式-策略模式
    spring-消息
    spring-集成redis
    spring-mvc高级技术
    spring-AOP
    restful规范
    十一,装饰器详解
    十,函数对象,嵌套,名称空间与作用域,闭包函数
  • 原文地址:https://www.cnblogs.com/henusyj-1314/p/11684444.html
Copyright © 2011-2022 走看看