【问题标题】:Statusbar.image has wrong colorStatusbar.image 颜色错误
【发布时间】:2021-07-02 09:29:05
【问题描述】:

我正在为我的状态栏图像使用以下代码:

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

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

我在想 MacOS 会添加效果以使所有状态栏图标看起来都独立,但显然情况并非如此......

有什么办法解决这个问题吗?

谢谢!

【问题讨论】:

标签: swift macos statusbar nsstatusbar


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    MacO 可以为所欲为。我建议阅读 Apple 文档: https://developer.apple.com/documentation/uikit/appearance_customization/supporting_dark_mode_in_your_interface

    如果您不手动提供代码,基本上您有 2 个选项。

    选项 1. 在 Xcode 中,导航到 assets.xcassets 中的图像资源。在属性窗格中,在“渲染为...”中指定“模板图像”。这对我的菜单栏应用很有效。

    选项 2. 在一个图像资源中提供不同版本的图标,然后 macOS 会选择合适的版本。

    【讨论】:

      猜你喜欢
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 2018-08-23
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多