Xcode11 对应的iOS系统为 iOS13。
Xcode11 新建项目时会多出一个SceneDelegate类,这个类里面的代码只有 iOS13系统的手机才会执行。
当启动方式采用手动创建window设置rootViewController时,Xcode11的window初始化方式与以前有所不同。
方式一
Xcode11 需要在 SceneDelegate类里面给window添加rootViewController, SceneDelegate里面window是已经创建好了的,不需要再次创建。
#import "SceneDelegate.h"
#import "ViewController.h"
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
self.window.rootViewController = [[ViewController alloc] init];
[self.window makeKeyAndVisible];
///或者使用下面的代码
/*
self.window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
self.window.windowScene = (UIWindowScene *)scene;
self.window.rootViewController = [[ViewController alloc] init];
[self.window makeKeyAndVisible];
*/
}
兼容iOS13以下的版本,需要在AppDelegate中创建window设置rootViewController
#import "AppDelegate.h"
#import "ViewController.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if (@available(iOS 13,*)) {
} else {
self.window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
self.window.rootViewController = [[BaseTabBarController alloc] init];
[self.window makeKeyAndVisible];
}
return YES;
}
⚠️注意:在运行完成后,页面是全黑,因为没有给ViewController这个页面设置背景色导致的,不是代码的问题。
方式二
参照以往的AppDelegate里面
删除SceneDelegate代理文件 (可选)
删除 Info.plist里面的Application Scene Manifest配置(一定要删除)
删除 AppDelegate代理的两个方法:
application:configurationForConnectingSceneSession:options:
application: didDiscardSceneSessions:
这两个方法一定要删除,否则使用纯代码创建的Window和导航控制器UINavigationController不会生效。
网友评论