微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Statusbar.image 颜色错误

如何解决Statusbar.image 颜色错误

我的状态栏图像使用以下代码

let icon = NSImage(imageLiteralResourceName:"flag")
statusBarItem.image = icon

这会导致某些背景颜色/模式的颜色错误。在图片中,白色的应该是黑色的。图像资源为白色/透明。如果我改变它,我会遇到同样的问题。在某些配置下,所有其他状态栏图像将变为白色,而我的将保持黑色。

我以为 MacOS 会添加效果,使所有状态栏图标本身看起来都统一,但显然事实并非如此......

有什么想法可以解决这个问题吗?

enter image description here

谢谢!

解决方法

我找到了解决方案。我再次意识到 Apple 对 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
        }
        
        
        
    }

在我的测试中,这适用于所有场景。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。