我找到了解决方案。我再次意识到苹果对 MacOS 开发的支持比 iOS 少得多。我认为状态栏图标的颜色调整应该是操作系统的任务,但苹果让开发者去做。任何。
这是解决方案:
您必须提供两种版本的图标,一种是黑色的,另一种是白色的。
当应用程序启动时,您必须检查用户的 MacO 是处于暗模式还是亮模式。这可以通过以下代码完成:
let mode = UserDefaults.standard.string(forKey: "AppleInterfaceStyle")
if (mode == "Dark"){
let icon = NSImage(imageLiteralResourceName:"flag")
statusBarItem.image = icon
} else {
let icon = NSImage(imageLiteralResourceName:"flagDark")
statusBarItem.image = icon
}
现在仍然存在一个问题:当用户在您的应用程序运行时更改模式时,图标颜色不会更新。另外:如果用户使用自动模式(即白天亮,晚上暗),图标颜色也不会切换。
您可以通过收听暗模式设置更改时触发的特定通知来解决该问题:
DistributedNotificationCenter.default.addObserver(self, selector: #selector(updateIcon), name: NSNotification.Name(rawValue: "AppleInterfaceThemeChangedNotification"), object: nil)
@objc func updateIcon(){
print("updateIcon ausgeführt")
let mode = UserDefaults.standard.string(forKey: "AppleInterfaceStyle")
if (mode == "Dark"){
let icon = NSImage(imageLiteralResourceName:"flag")
statusBarItem.image = icon
} else {
let icon = NSImage(imageLiteralResourceName:"flagDark")
statusBarItem.image = icon
}
}
在我的测试中,这适用于所有场景。