如何在SwiftUI中获取Mac应用主窗口的高度?
解决方案:Mac端替换
UIScreen.main.bounds.height的方法 1. 获取NSWindow实例
在SwiftUI开发Mac应用时,有两种实用方式获取NSWindow实例:
- 单窗口应用快速获取:直接从应用的窗口列表取第一个
if let window = NSApplication.shared.windows.first { // 后续使用该window实例 }
- 多窗口适配方案:通过环境变量注入窗口
先定义环境键:
private struct WindowKey: EnvironmentKey { static let defaultValue: NSWindow? = nil } extension EnvironmentValues { var window: NSWindow? { get { self[WindowKey.self] } set { self[WindowKey.self] = newValue } } }
在App入口注入窗口引用:
@main struct YourMacApp: App { var body: some Scene { WindowGroup { ContentView() .environment(\.window, NSApplication.shared.windows.first) } } }
之后在目标视图中即可通过环境变量获取:
@Environment(\.window) private var window
2. 获取窗口或屏幕尺寸
- 窗口宽高:拿到
NSWindow实例后,直接读取frame.size属性即可获取当前窗口的尺寸
if let windowHeight = window?.frame.size.height { // 用windowHeight替代原代码中的UIScreen.main.bounds.height }
- 屏幕尺寸:如果需要类似iOS中屏幕全局尺寸的效果,使用
NSScreen:
// 主屏幕高度 let screenHeight = NSScreen.main?.frame.size.height ?? 0 // 当前窗口所在屏幕的高度 let currentScreenHeight = window?.screen?.frame.size.height ?? 0
3. 针对教程代码的简便替换
对应你提到的代码位置,可直接用一行代码完成替换,优先取窗口高度,没有则 fallback 到屏幕高度:
let height = NSApplication.shared.windows.first?.frame.size.height ?? NSScreen.main?.frame.size.height ?? 0
内容的提问来源于stack exchange,提问作者Shock9616
相关产品推荐
相关产品推荐

