UIScreen.main弃用后,iOS获取屏幕尺寸的正确方法
在单屏iPhone上获取屏幕尺寸的正确方法
针对iOS 16+出现的UIScreen.main弃用警告,单屏iPhone上可以用以下几种符合苹果推荐规范的方式获取屏幕尺寸:
方法一:从当前视图/控制器的上下文获取
如果在UIViewController中,直接通过当前视图关联的windowScene获取:
guard let windowScene = view.window?.windowScene else { // 处理视图未加载完成等异常情况 return CGSize.zero } let screenSize = windowScene.screen.bounds.size
如果是在自定义UIView里,可通过自身的window追溯:
guard let window = self.window, let windowScene = window.windowScene else { return CGSize.zero } let screenSize = windowScene.screen.bounds.size
方法二:通过应用的已连接场景获取(单屏场景专属)
单屏设备下,UIApplication.shared.connectedScenes只会存在一个UIWindowScene,可以直接取第一个:
guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene else { return CGSize.zero } let screenSize = windowScene.screen.bounds.size
注意事项
- 避免在视图未完成加载时调用(比如
viewDidLoad之前),此时可能无法获取到window或windowScene,会返回空值。 - 即便单屏设备不会出现多屏场景,仍建议遵循苹果的上下文获取逻辑,避免后续系统更新带来的兼容性问题。
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

