如何在swift中获取window大小(包括iPad分屏)

How to get window size in swift (including iPad split screen)

我想获取 window 边界作为 CGRect 对象。 这是我当前的代码:

let screenSize : CGRect = self.view.window?.frame

我在网上找到这段代码,但有时 screenSize 是零。 还有其他选择吗?

您可以通过输入分别获取高度和宽度:

let screenSize = UIScreen.main.bounds
let screenWidth = screenSize.width
let screenHeight = screenSize.height

我找到了答案

let screenSize : CGRect = self.view.frame

UIView 有一个名为 window 的 属性,在将视图添加到 window 之前,它被称为 nil。当 window 属性 不是 nil 时获取 frame。所以,在下面的实验中,只有在输入viewWillLayoutSubviews时,view.window的值才不是nil

https://eunjin3786.tistory.com/96

抱歉,我找不到合适的英文示例。本次实验作者在view.window不是nil的时候标注了蓝色标题。

if let window = UIApplication.shared.windows.filter({ [=10=].isKeyWindow }).first {
   let screenFrame = window.frame
}

您可以从 screenFrame

获取尺码

iOS 15 弃用了上述解决方案。这是一个新的语法,它应该是最新的、安全的并且可以在分屏上实际工作 iPad。

let windowSize = UIApplication.shared.connectedScenes
                .compactMap({ scene -> UIWindow? in
                    (scene as? UIWindowScene)?.keyWindow
                })
                .first?
                .frame
                .size