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

iOS13+ Objective-C无Storyboard设置根视图控制器黑屏如何解决

Objective-C 纯代码设置iOS14+ SceneDelegate根视图(无Storyboard)黑屏修复方案

必须完成的配置修正

1. Info.plist清理

你需要先确保项目配置中完全移除了Storyboard相关关联:

  • 删除Main storyboard file base name配置项
  • 展开Application Scene Manifest → Scene Configuration → Application Session Role → Item 0,删除其中的Storyboard Name配置项

2. 修正AppDelegate代码

使用SceneDelegate管理界面生命周期时,不需要在AppDelegate中初始化window,修改didFinishLaunchingWithOptions方法为:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    return YES;
}

3. 修正SceneDelegate代码

原有代码的核心错误是自行创建了UIWindowScene实例,应当直接复用方法传入的scene参数,同时window的初始化要放在SceneDelegate中完成:
首先确保SceneDelegate.h中已经声明window属性:

@interface SceneDelegate : UIResponder <UIWindowSceneDelegate>
@property (strong, nonatomic) UIWindow * window;
@end

然后修改willConnectToSession方法实现:

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
    // 直接强转传入的scene参数,无需自行创建UIWindowScene
    UIWindowScene *winScene = (UIWindowScene *)scene;
    // 绑定当前scene初始化window
    self.window = [[UIWindow alloc] initWithWindowScene:winScene];
    self.window.frame = winScene.coordinateSpace.bounds;
    // 设置根视图控制器
    ViewController *viewController = [[ViewController alloc] init];
    // 建议显式设置背景色,避免空视图误以为是黑屏
    viewController.view.backgroundColor = [UIColor whiteColor];
    self.window.rootViewController = viewController;
    [self.window makeKeyAndVisible];
}

完成以上修改后重新运行即可正常显示根视图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 09:21:02