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

