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
相关产品推荐
相关产品推荐

