UIScreen 主边界不考虑实际设备屏幕尺寸

UIScreen main bounds does not respect actual device screen size

我想创建一个没有任何故事板的项目。

我已经删除了 Main 和 LaunchScreen 故事板。

像往常一样,我添加到我的 applicationDidFinishLaunchingWithOptions:

        window = UIWindow(frame: UIScreen.main.bounds
        window?.rootViewController = ViewController()
        window?.makeKeyAndVisible()

现在在项目设置 -> 常规中,如果我将启动屏幕文件留空 UIScreen.main.bounds

(CGRect) $R12 = (origin = (x = 0, y = 0), size = (width = 320, height = 480))

我得到以下屏幕:

现在,如果我在 Launch Screen File 字段中添加一些内容,在 Info.plist -> Information 属性 List a new line with key Launch screen interface file base name 出现并且边界是正确的.即使值为空,边界也是正确的。

为什么 Launch screen interface file base name 的存在会影响 UIScreen 边界?

它开始于 iOS 8.0,当时 iPhone 6/6plus 发布(TheFuquan 用户评论它开始于 iPhone 5 版本),2014 年。如果你想回到那个时候要支持此类新设备,您肯定需要添加适当的启动屏幕。通过为您支持的每个设备使用不同尺寸的静态图像,或者通过 xib/storyboards.

现在,您已经解决了您的困惑。解决这个问题的方法是提供正确的启动 screen/image.

Apple 的人机界面指南(启动屏幕):https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/launch-screen/