IOS 使用Xcode11新建项目scenedelegate处理和Main.storyboard的处理
1.使用scenedelegate(iOS 13以下黑屏)
xcode更新到11后,新建工程里面多了好多东西,除了原有的AppDelegate外,又新加了一个SceneDelegate,是iPadOS用来做多窗口支持的,这时候如果你还像之前的一样,在APPdelegate里写self.window的方法的话,运行程序,直接崩溃了,因为新版本的xcode的APPdelegate.h里面已经没有了window这个属性,如下图所示:
iOS13之前,Appdelegate会处理App生命周期和UI生命周期,但iOS 13之后,Appdelegate不在处理UI生命周期了,只负责处理 App 生命周期和新的 Scene Session 生命周期。而UI的生命周期就由Scene Delegate处理了。所以我们写self.window时就要放到scenedelegate里。如下:
代码如下:
– (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,图中红色部分。
2.在APPdelegate.h文件增加window属性,
然后在APPdelegate.m里删除新加的scene方法。
添加之前的APPdelegate生命周期的方法,如进入前台后台等等,这些方法在xcode11以下的版本里有,你可以从以前的项目复制过来。
3.*后删除scenedelegate的2个文件
至此,运行的项目就可以在iOS 13以下的设备运行了。同样iOS 13的设备也可以用。
3.关于main.storyboard
使用xcode新建新建项目时,都会带一个main.storyboard的主界面。如果你不进行代码控制,默认APP启动会加载main.storyboard这个界面。怎么使用这个界面来加载这里就不在介绍了,这里只说用代码加载主页,不使用main.storyboard时,怎么处理这个界面。首先和这个界面有关的主要有以下3个:*个就是main.storeboaard这个文件,如下图所示:
第二个就是:General下main interface 这个选项,如下图所示:
第三个就是在info表中的”Main storyboard file base name”,这个对应的vaule值是main,
所以要不用main.storyboard,需要修改这三处:1.删除main.storyboard这个文件,2.将Main Interface改为空,
3.删掉info表中的”Main storyboard file base name”。
这一步在新版xcode中已经不需要了。当第二步置为空的时候,info里面已经没有Main storyboard file base name了,但是在xcode11中info文件,多了个SceneDelegate
的配置信息,如下图所示:这就需要把图中红色的部分也删掉。