适配多机型iOS项目屏幕点尺寸异常,咨询LaunchImage分辨率要求
Hey there, let's tackle your issue step by step!
为什么你获取的屏幕点尺寸不符合预期?
核心原因是你的应用可能在兼容模式下运行——当iOS检测到应用没有适配当前设备的启动资源(LaunchImage 或 Launch Screen)时,它会自动将应用缩放到旧设备的尺寸(比如Retina 4的320x568),导致[[UIScreen mainScreen] bounds]返回的是兼容模式下的尺寸,而非设备原生的点尺寸。
虽然你提到已经设置了Retina 4.7和5.5的LaunchImage,但可能存在配置遗漏或错误,导致系统没有识别到这些适配资源。
4.7寸和5.5寸LaunchImage的分辨率要求
是的,这两类设备的LaunchImage有明确的分辨率要求,对应关系如下:
- 4.7寸设备(iPhone 6/6s/7/8):
- 分辨率:
750x1334(@2x),对应原生点尺寸375x667
- 分辨率:
- 5.5寸设备(iPhone 6 Plus/6s Plus/7 Plus/8 Plus):
- 分辨率:
1242x2208(@3x),对应原生点尺寸414x736
- 分辨率:
另外补充:如果你的项目还要适配iPhone X及以后的设备,也需要添加对应尺寸的LaunchImage(比如iPhone X的1125x2436 @3x),否则这些设备也会进入兼容模式。
解决屏幕尺寸获取错误的步骤
检查LaunchImage配置完整性
打开你的Image.xcassets,确认LaunchImage包含所有需要的设备类型:- Retina 4(640x1136 @2x):对应iPhone 5/5s/5c
- Retina 4.7(750x1334 @2x):对应iPhone 6/7/8
- Retina 5.5(1242x2208 @3x):对应iPhone 6+/7+/8+
- iPhone X及以后的对应尺寸:比如iPhone X的1125x2436 @3x,iPhone 11的828x1792 @2x等
推荐使用Launch Screen替代LaunchImage
维护多套LaunchImage很繁琐,更高效的方式是使用Launch Screen.storyboard:- 在项目的General设置页,找到
Launch Screen File选项,选择对应的storyboard文件(如果没有可以新建一个) - Launch Screen是自适应的,系统会自动适配所有设备的屏幕尺寸,应用会以原生尺寸运行,此时
[[UIScreen mainScreen] bounds]就能返回正确的点尺寸
- 在项目的General设置页,找到
清理项目缓存并重新运行
有时候Xcode的缓存会导致配置不生效,执行Product > Clean Build Folder(快捷键:Cmd+Shift+Option+K),然后重新编译运行项目。
内容的提问来源于stack exchange,提问作者arachide

