在我的Web视图中,我使用CSS变量在运行时更改各种颜色,具体取决于是否启用了macOS 10.14的暗模式 . 那太好了 . 棘手的部分是在系统外观变化时更新颜色 .
我通过观察窗口上的 effectiveAppearance
属性来检测更改 . 该通知按预期发布,但当我更新颜色时, NSColor
仍然给我暗模式颜色(或应用程序启动的任何模式) . 例如,当我响应从暗模式到光线的切换时, NSColor.textColor
仍然是白色而不是黑色 . 我自己的颜色资产似乎也是如此 .
我应该采用不同的方式或时间来获得这些颜色吗?或者这可能是操作系统错误?
Edit: 如果Web视图的有效外观名称发生变化,我还尝试创建 WebView
的子类并更新 drawRect()
中的颜色 . 第一次,即使应用程序在黑暗模式下启动,我也能获得所有浅色 . 之后,当我从灯光模式切换到黑暗时,我得到系统颜色的深色版本和资产目录颜色的浅色版本 .
在调试器外部,切换到暗模式可以工作,但初始加载总是变为浅色 .
1 回答
似乎改变系统外观并没有改变当前的外观 . 外观也取决于"owning"视图在同一视图层次结构中,由于活力并且还在视图上手动设置
appearance
属性,可能会出现多次出现 .Cocoa已经在几种情况下自动为您设置了正确的外观,例如
drawRect:
. 在其他地方,你应该这样做: