1.使用scenedelegate(iOS 13以下黑屏)

xcode更新到11后,新建工程里面多了好多东西,除了原有的AppDelegate外,又新加了一个SceneDelegate,看了一下官方文档,说是iPadOS用来做多窗口支持的,这时候如果你还像之前的一样,在APPdelegate里写self.window的方法的话,运行程序,直接崩溃了,因为新版本的xcode的APPdelegate.h里面已经没有了window这个属性,如下图所示:

 

使用xcode 11新建项目的处理

 

iOS13之前,Appdelegate会处理App生命周期和UI生命周期,但iOS 13之后,Appdelegate不在处理UI生命周期了,只负责处理 App 生命周期和新的 Scene Session 生命周期。而UI的生命周期就由Scene Delegate处理了。所以我们写self.window时就要放到scenedelegate里。如下:

 

使用xcode 11新建项目的处理

 

代码如下:

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions  API_AVAILABLE(ios(13.0)){

       UIWindowScene *windowScene = (UIWindowScene *)scene;

    self.window = [[UIWindow alloc] initWithWindowScene:windowScene];

    self.window.frame = windowScene.coordinateSpace.bounds;

    ViewController *control = [[ViewController alloc]init];

    self.window.rootViewController = control;

    [self.window makeKeyAndVisible];

}

这样就可以使用scenedelegate了。但使用了scenedelegate后,在iOS 13以下的手机运行会黑屏。如果你的程序只在iOS 13手机上运行,不适配iOS 13以下的设备,那么就到这里结束了。

2.如果要适配iOS 13以下的设备,需要把相关的scenedelegate都删掉才行。操作步骤如下:

1.删除info文件里关于scenedelegate里的配置信息:删除Application Scene Manifest,图中红色部分。

使用xcode 11新建项目的处理

 

2.在APPdelegate.h文件增加window属性,

使用xcode 11新建项目的处理

 

然后在APPdelegate.m里删除新加的scene方法。

 

使用xcode 11新建项目的处理

添加之前的APPdelegate生命周期的方法,如进入前台后台等等,这些方法在xcode11以下的版本里有,你可以从以前的项目复制过来。

 

使用xcode 11新建项目的处理

3.最后删除scenedelegate的2个文件

使用xcode 11新建项目的处理

 

至此,运行的项目就可以在iOS 13以下的设备运行了。同样iOS 13的设备也可以用。

参考链接:http://zhk1024.com/archives/112/

                  https://www.jianshu.com/p/801de3beee22

                  http://www..com/article/3604706981/

相关文章:

  • 2022-01-16
  • 2021-07-31
  • 2021-11-09
  • 2021-11-29
  • 2021-08-22
  • 2022-12-23
  • 2022-12-23
  • 2021-11-29
猜你喜欢
  • 2021-11-01
  • 2022-12-23
  • 2021-08-10
  • 2022-01-30
  • 2022-03-06
  • 2022-01-15
  • 2022-12-23
相关资源
相似解决方案