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文件中会提示:
    iOS开发——Xcode11创建iOS13版本工程更改低版本兼容问题(屏幕变黑、无UI等问题)_第1张图片
    选择最后一个,点击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。代码下边贴出,根据需要修改。
    iOS开发——Xcode11创建iOS13版本工程更改低版本兼容问题(屏幕变黑、无UI等问题)_第2张图片
#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’ 即可
    iOS开发——Xcode11创建iOS13版本工程更改低版本兼容问题(屏幕变黑、无UI等问题)_第3张图片

这样就可以了。

你可能感兴趣的:(iOS开发)