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

macOS应用中替代iOS UIScreen获取屏幕及窗口尺寸的方法

macOS 获取窗口与屏幕尺寸方案

你在iOS中通过UIScreen获取屏幕尺寸的逻辑,在macOS中可以通过NSWindow(窗口)和NSScreen(显示器)对应的API实现,以下是具体方案:

1. 获取应用窗口的宽高

macOS中通过NSApplication获取主窗口实例,再读取其frame属性即可得到窗口尺寸:

直接获取主窗口尺寸

if let mainWindow = NSApplication.shared.mainWindow {
    let windowWidth = mainWindow.frame.size.width
    let windowHeight = mainWindow.frame.size.height
    // 使用宽高值
}

封装成扩展(类似iOS的写法)

extension NSApplication {
    static var mainWindowSize: NSSize? {
        mainWindow?.frame.size
    }
}

// 使用示例
if let size = NSApplication.mainWindowSize {
    print("窗口宽:\(size.width),高:\(size.height)")
}

2. 获取显示器的宽高

macOS中用NSScreen类获取显示器信息,其中main属性对应主显示器,需要区分整体屏幕尺寸和可用区域尺寸(可用区域会排除菜单栏、Dock等系统占用区域):

获取主显示器尺寸

if let mainScreen = NSScreen.main {
    // 整体屏幕尺寸(包含系统区域)
    let fullWidth = mainScreen.frame.size.width
    let fullHeight = mainScreen.frame.size.height
    
    // 可用区域尺寸(不含菜单栏、Dock)
    let visibleWidth = mainScreen.visibleFrame.size.width
    let visibleHeight = mainScreen.visibleFrame.size.height
    
    // 使用尺寸值
}

封装成扩展

extension NSScreen {
    // 主显示器整体尺寸
    static let fullScreenWidth = main?.frame.size.width ?? 0
    static let fullScreenHeight = main?.frame.size.height ?? 0
    
    // 主显示器可用区域尺寸
    static let visibleScreenWidth = main?.visibleFrame.size.width ?? 0
    static let visibleScreenHeight = main?.visibleFrame.size.height ?? 0
}

// 使用示例
print("显示器整体宽:\(NSScreen.fullScreenWidth),高:\(NSScreen.fullScreenHeight)")
print("显示器可用宽:\(NSScreen.visibleScreenWidth),高:\(NSScreen.visibleScreenHeight)")

内容的提问来源于stack exchange,提问作者user21804292

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:55:05