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
相关产品推荐
相关产品推荐

