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

Objective-C中ViewController的viewDidLoad已调用却出现黑屏问题

解决LoginViewController viewDidLoad已调用但屏幕黑屏的问题

核心问题排查与修复

1. 修正viewDidLoad中super方法的调用顺序

原代码中先执行自定义逻辑再调用[super viewDidLoad],会打乱UIViewController的初始化流程,导致视图渲染异常。正确做法是优先调用父类初始化方法,再执行自定义代码:

#import "LoginViewController.h"

@implementation LoginViewController

- (void)viewDidLoad {
    [super viewDidLoad]; // 先执行父类初始化逻辑
    NSLog(@"LoginViewController viewDidLoad");
    self.view.backgroundColor = [UIColor redColor];
}

@end

2. 验证Storyboard配置正确性

打开Main.storyboard,选中LoginViewController,在Identity Inspector中确认:

  • Storyboard ID设置为LoginView,与代码中instantiateViewControllerWithIdentifier:的参数完全一致;
  • Class字段关联的是LoginViewController类,没有选错或留空。

3. 适配iOS 13+的Window生命周期

如果项目基于iOS 13及以上版本,AppDelegate不再负责window管理,需在SceneDelegate中完成初始化:

// SceneDelegate.m
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
    UIWindowScene *windowScene = (UIWindowScene *)scene;
    self.window = [[UIWindow alloc] initWithWindowScene:windowScene];
    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    LoginViewController *vc = [sb instantiateViewControllerWithIdentifier:@"LoginView"];
    self.window.rootViewController = vc;
    [self.window makeKeyAndVisible];
}

同时确认Info.plist中已配置Application Scene Manifest,且项目包含SceneDelegate.h/m文件。

4. 检查视图布局约束

在Storyboard中选中LoginViewController的根view,确认约束设置正确:

  • 顶部、底部、左侧、右侧均与父视图(安全区域或父视图)对齐,确保视图能铺满屏幕;
  • 无冲突约束导致视图被隐藏或偏移。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:30:07