Xcode11: 删除默认Main.storyBoard、自定义根控制器

使用Xcode11新建项目之后, 会发现多了两个文件夹


Xcode11: 删除默认Main.storyBoard、自定义根控制器_第1张图片
image.png

原因: Xcode自动新增了一个SceneDelegate文件, 也就是说在iOS13中Appdelegate的作用发生了改变: iOS13之前,Appdelegate的作用是全权处理App生命周期和UI生命周期; iOS13之后,Appdelegate的作用是只处理 App 生命周期, 而UI的生命周期将全权由新增的SceneDelegate来处理.

怎么初始化自定义跟控制器呢?

首先, UI相关的已经不能放在Appdelegate中, 而是放在SceneDelegate中处理.

其次, 要在Info.plist中删除对应的路径.


Xcode11: 删除默认Main.storyBoard、自定义根控制器_第2张图片
image.png

最后, 在SceneDelegate.m中添加根控制器

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
    
    self.window = [[UIWindow alloc] initWithWindowScene:(UIWindowScene *)scene];
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    UIViewController *rootVc = [[UIViewController alloc]init];
    rootVc.view.backgroundColor = [UIColor purpleColor];
    UINavigationController *rootNav = [[UINavigationController alloc]initWithRootViewController:rootVc];
    [self.window setRootViewController:rootNav];
    [self.window makeKeyAndVisible];
}

注意1: 有时候当你运行的时候, 可能会发现屏幕的加载尺寸不对, 这时候只需要配置下启动图就好了.
image.png

注意2: SceneDelegate.m中的方法只有iOS13之后才能使用, 如果新建的项目要兼容之前的版本, 就需要自己在SceneDelegate和Appdelegate中做判断了.

.End

你可能感兴趣的:(Xcode11: 删除默认Main.storyBoard、自定义根控制器)