老旧Xcode项目UIWindow在新iPhone设备上无法填满屏幕问题
解决老旧项目UIWindow在iPhone X系列设备上无法适配安全区域的问题
你的问题大概率是因为老旧项目缺少Launch Screen配置,或是仍在使用过时的Launch Images且未适配新设备尺寸,导致系统将应用以「兼容模式」运行,限制了窗口的全屏展示。下面是具体的排查和解决步骤:
1. 替换Launch Images为Launch Screen
老项目在AutoLayout发布前创建,通常依赖静态的Launch Images适配屏幕,但iPhone X系列设备需要Launch Screen来正确识别全屏尺寸:
- 打开项目的
General标签页,找到App Icons and Launch Images区域 - 将
Launch Screen File设置为已有的Launch Screen.storyboard(如果没有,右键项目→New File→选择Launch Screen创建即可) - 移除
Launch Images Source的配置,确保系统优先使用Launch Screen适配全设备
2. 验证关键构建设置
检查以下几个配置,确保适配逻辑正常:
- 打开
Build Settings,搜索View controller-based status bar appearance,设置为YES(这是iOS 7+的推荐配置,会影响安全区域的识别逻辑) - 确认
Deployment Target设置为iOS 11或更高(安全区域是iOS 11引入的,低版本部署目标可能触发兼容限制) - 在
General标签的Deployment Info里,勾选Require full screen,强制应用全屏运行,避免系统添加兼容黑边
3. 优化窗口初始化代码
虽然你说没有其他代码修改UIWindow,但可以用更稳妥的方式初始化窗口,确保适配全屏:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.backgroundColor = [UIColor redColor]; self.window.rootViewController = [UIViewController new]; [self.window makeKeyAndVisible]; return YES; }
注:[UIScreen mainScreen].bounds在iPhone X系列设备上已经包含全屏尺寸,只要系统正确识别设备,这个frame就能覆盖整个屏幕。
4. 清理项目缓存
老项目可能残留了旧的适配缓存,尝试以下操作:
- 清理编译缓存:
Product → Clean Build Folder(快捷键⇧⌘K) - 删除模拟器中的应用,重启模拟器
- 重启Xcode后重新编译运行
完成以上步骤后,你的UIWindow应该能在iPhone X、XR、XS Max上正确填满屏幕,安全区域也会被系统正常识别。
内容的提问来源于stack exchange,提问作者Luke97
相关产品推荐
相关产品推荐

