問題代碼
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// 根據設備類型選擇 ViewController...
if (iPhone5) self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_Portrait5" bundle:nil];
else if (iPhone4) self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_Portrait4" bundle:nil];
else self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_PortraitPad" bundle:nil];
// 缺少關鍵兩行,導致窗口黑屏
}
修正:設置 rootViewController 並顯示窗口
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
現代最佳實踐(iOS 13+ SceneDelegate)
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
UIWindowScene *windowScene = (UIWindowScene *)scene;
self.window = [[UIWindow alloc] initWithWindowScene:windowScene];
// 同樣邏輯選擇 VC
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
}
補充
- 優先使用 Auto Layout / Size Classes 適配不同尺寸,避免維護多套 Nib。
- 啟動圖可用 Launch Screen Storyboard 統一配置。