You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS模拟器创建视图时显示空白屏——《Big Nerd Ranch iOS编程第4版》求助

解决AppDelegate创建视图后模拟器空白的问题

核心原因

iOS 13及以后版本引入了Scene会话架构,AppDelegate不再负责管理应用窗口的生命周期,窗口的创建和管理被移交给了SceneDelegate。你按照旧版教材在AppDelegate中创建的UIWindow不会被系统识别并使用,所以视图无法显示。

两种解决方案

方案一:关闭Scene支持,和教材代码保持同步

这种方式适合完全跟随教材步骤,回到旧版窗口管理模式:

  1. 打开项目的Info配置页,找到Application Scene Manifest条目,右键删除整个配置项。
  2. 删除项目中的SceneDelegate.h和SceneDelegate.m文件。
  3. 在AppDelegate.h中确保已添加window属性:
    @property (strong, nonatomic) UIWindow *window;
    
  4. 保留AppDelegate.m中application:didFinishLaunchingWithOptions:的代码,删除所有Scene相关的方法(即#pragma mark - UISceneSession lifecycle下方的两个方法)。

方案二:适配现代Scene架构,将代码移至SceneDelegate

这种方式符合当前iOS标准开发模式:

  1. 打开SceneDelegate.m,找到scene:willConnectToSession:options:方法,替换为以下代码:
    - (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
        UIWindowScene *windowScene = (UIWindowScene *)scene;
        self.window = [[UIWindow alloc] initWithWindowScene:windowScene];
        self.window.frame = windowScene.coordinateSpace.bounds;
        
        // 创建红色视图并设置居中位置
        CGFloat screenWidth = windowScene.coordinateSpace.bounds.size.width;
        CGFloat screenHeight = windowScene.coordinateSpace.bounds.size.height;
        CGRect firstFrame = CGRectMake((screenWidth - 100)/2, (screenHeight - 150)/2, 100, 150);
        
        BNRHypnosisView *firstView = [[BNRHypnosisView alloc] initWithFrame:firstFrame];
        firstView.backgroundColor = [UIColor redColor];
        [self.window addSubview:firstView];
        
        self.window.backgroundColor = [UIColor whiteColor];
        [self.window makeKeyAndVisible];
    }
    
  2. 打开AppDelegate.m,清空application:didFinishLaunchingWithOptions:中创建window和视图的代码,只保留基础初始化:
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        return YES;
    }
    

额外优化提示

你原本写的CGRectMake(160, 240, 100, 150)是固定坐标,在不同尺寸的设备上无法保证居中。方案二中的代码已改成基于屏幕尺寸计算居中位置,能适配所有设备。

内容的提问来源于stack exchange,提问作者nicktorres

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 02:17:33