iPhone 8在XCode 9中屏幕高度检测异常问题咨询
问题分析与解决方案
别担心,你的iPhone 8绝对没有故障!这个问题我自己开发App时也踩过坑,本质是iOS的兼容模式触发导致的,和硬件完全无关,下面给你拆解原因和解决办法:
核心原因
当你的App没有提供适配iPhone 8的启动资源(启动图/启动屏)时,iOS会默认把App以「iPhone 5/5s兼容模式」运行——这时候系统会模拟iPhone 5的屏幕尺寸,所以self.view.bounds.height和UIScreen.main.bounds.height都会返回568.0,而非iPhone 8的667.0。
具体解决步骤
1. 优先使用Launch Screen(推荐方案)
静态启动图很容易因为资源不全触发兼容模式,建议直接用Launch Screen来适配所有设备:
- 打开你的Xcode项目,确认存在
Launch Screen.storyboard或LaunchScreen.xib文件; - 在Target的「General」标签页里,找到「App Icons and Launch Images」,将「Launch Screen File」设置为你的启动屏文件;
- 检查启动屏的约束:确保没有设置固定高度的约束,所有元素都用自适应布局(比如上下左右间距约束),保证能适配不同屏幕尺寸。
2. 若仍使用静态LaunchImage,补全对应资源
如果你坚持用静态启动图,必须补全iPhone 8对应的资源:
- 打开
Assets.xcassets,选中LaunchImage; - 在右侧属性面板中,勾选「iPhone 6/7/8」的选项;
- 导入对应分辨率的图片:750×1334像素(@2x),确保每个尺寸的资源都正确填充。
3. 清理冗余配置与缓存
- 检查
Info.plist文件,如果存在UILaunchImages这类旧的启动图配置项,直接删除,避免干扰新的启动设置; - 彻底删除iPhone 8上的测试App,然后在Xcode中执行「Clean Build Folder」(快捷键
Command+Shift+K),最后重新编译安装。
完成以上步骤后,再测试UIScreen.main.bounds.height,应该就能得到正确的667.0了。
内容的提问来源于stack exchange,提问作者LuisNY
相关产品推荐
相关产品推荐

