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

Swift中如何查看didChangeScreenParametersNotification通知内容?

解决NSApplication.didChangeScreenParametersNotification获取屏幕参数的问题

你当前代码的问题在于,NSApplication.didChangeScreenParametersNotification通知的object是NSApplication实例,不是NSScreen,所以强制转换会失败。

要获取更新后的屏幕参数,收到通知后直接访问当前的屏幕信息即可,比如获取主屏幕的可见帧:

var myNotificationObserver: NSObjectProtocol? = nil

myNotificationObserver = NotificationCenter.default.addObserver(forName: NSApplication.didChangeScreenParametersNotification, object: NSApplication.shared, queue: .main) { [weak self] _ in
    // 获取主屏幕的可见帧(已扣除Dock等系统元素)
    if let mainScreen = NSScreen.main {
        print("更新后的屏幕可见尺寸:\(mainScreen.visibleFrame.size)")
    }
}

如果需要监听所有屏幕的变化,也可以遍历NSScreen.screens来获取每个屏幕的参数:

// 遍历所有屏幕
for screen in NSScreen.screens {
    print("屏幕\(screen.deviceDescription)的可见尺寸:\(screen.visibleFrame.size)")
}

补充说明

这个通知的作用是告知屏幕参数(比如分辨率、可见区域)发生了变化,它不会在通知的object或userInfo里携带具体的屏幕对象,而是需要你主动去查询当前的屏幕状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:53:10