首页 文章

更新暗模式:NSColor忽略外观变化?

提问于
浏览
2

在我的Web视图中,我使用CSS变量在运行时更改各种颜色,具体取决于是否启用了macOS 10.14的暗模式 . 那太好了 . 棘手的部分是在系统外观变化时更新颜色 .

我通过观察窗口上的 effectiveAppearance 属性来检测更改 . 该通知按预期发布,但当我更新颜色时, NSColor 仍然给我暗模式颜色(或应用程序启动的任何模式) . 例如,当我响应从暗模式到光线的切换时, NSColor.textColor 仍然是白色而不是黑色 . 我自己的颜色资产似乎也是如此 .

我应该采用不同的方式或时间来获得这些颜色吗?或者这可能是操作系统错误?

Edit: 如果Web视图的有效外观名称发生变化,我还尝试创建 WebView 的子类并更新 drawRect() 中的颜色 . 第一次,即使应用程序在黑暗模式下启动,我也能获得所有浅色 . 之后,当我从灯光模式切换到黑暗时,我得到系统颜色的深色版本和资产目录颜色的浅色版本 .

在调试器外部,切换到暗模式可以工作,但初始加载总是变为浅色 .

1 回答

  • 3

    似乎改变系统外观并没有改变当前的外观 . 外观也取决于"owning"视图在同一视图层次结构中,由于活力并且还在视图上手动设置 appearance 属性,可能会出现多次出现 .

    Cocoa已经在几种情况下自动为您设置了正确的外观,例如 drawRect: . 在其他地方,你应该这样做:

    NSAppearance * saved = [NSAppearance currentAppearance];
    [NSAppearance setCurrentAppearance:someView.effectiveAppearance];
    
    // Do your appearance-dependent work, like querying the CGColor from
    // a dynamic NSColor or getting its RGB values.
    
    [NSAppearance setCurrentAppearance:saved];
    

相关问题