iOS开发——Xcode11创建iOS13版本工程更改低版本兼容问题(屏幕变黑、无UI等问题)

高版本工程向低版本系统兼容问题

在Xcode11新建工程后发现自动新增了一个SceneDelegate文件。原因:iOS13中AppDelegate的职责发现了改变,具体的变化请参考这篇文章:Xcode11新变化:SceneDelegate
至于View跳转适配问题:
Xcode11新工程页面跳转向低版本兼容问题
当我用一个高于13.0版本的工程,连接一台低于iOS13系统版本的手机后会提示:OS version lower than deployment target。
解决办法:

  1. 首先降低Target版本,在Xcode最低支持iOS8.0
  2. 在修改了Target版本后,我们必须按照最初的App生命周期规则来,此时SceneDelegate文件中会提示:
    在这里插入图片描述
    选择最后一个,点击Fix,Xcode会自动添加API_AVAILABLE(ios(13.0))字段。同样处理在AppDelegate中做相同的处理。这样工程可以兼容iOS8.0以上任何一个版本,如果低于13,就会跟往常一样通过在Appdelegate的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中创建根控制器。高于ios13版本的,则自动进入新规则。
  3. 选择低于iOS13版本的模拟器或者真机运行之后,还是不行,会出现黑屏,控制台提示信息:The app delegate must implement the window property if it wants to use a main storyboard file。
    原因:在iOS13中,AppDelegate把iOS13之前的那些管理整个App生命周期等的任务都委托给了SceneDelegate,所以原来AppDelegate的window属性自然也就跑到SceneDelegate里面去了。而这个SceneDelegate又被我们标注了只能iOS13可以用,也就是说iOS13以下版本的iPhone是不会执行整个SceneDelegate的代码的,所以在低版本中系统就找不到window属性。
    解决办法 :我默认的Main.storyBoard的控制器是ViewController,因此,导入后,利用@synthesize,声明一下window。再初始化一下storyBoard。代码下边贴出,根据需要修改。
    在这里插入图片描述
#import "AppDelegate.h"
#import "ViewController.h"
@interface AppDelegate ()
@end
@implementation AppDelegate

@synthesize window = _window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //初始化主界面为Main.storyBoard
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    //控制器
    ViewController *vc = [mainStoryboard  instantiateViewControllerWithIdentifier:@"ViewController"];
    UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:vc];
    //设置根控制器
    self.window.rootViewController = nav;
    return YES;
}
  1. 如出现X-code报错: Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘Storyboard () doesn’t contain a view controller with identifier ‘ViewController” 信息
    错误: Storyboard中没有一个identifier为 ‘ViewController’ 的控制器.
    解决: Storyboard中控制的属性,将目标控制器的identifier设置成’**ViewController’ 即可
    在这里插入图片描述

这样就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值