You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:31:12