Unc*_*mon 10 cocoa nscolor macos-mojave
在我的Web视图中,我使用CSS变量在运行时更改各种颜色,具体取决于是否启用了macOS 10.14的暗模式.那很多都很好.棘手的部分是在系统外观变化时更新颜色.
我通过观察effectiveAppearance
窗口上的属性来检测更改.该通知按预期发布,但当我更新颜色时,NSColor
仍然会给我暗模式颜色(或应用程序启动的任何模式).例如,NSColor.textColor
当我响应从暗模式到光线的切换时,仍然是白色而不是黑色.我自己的颜色资产似乎也是如此.
我应该采用不同的方式或时间来获得这些颜色吗?或者这可能是操作系统错误?
编辑:如果Web视图的有效外观名称发生更改,
我还尝试创建子类WebView
并更新我的颜色drawRect()
.第一次,即使应用程序在黑暗模式下启动,我也能获得所有浅色.之后,当我从灯光模式切换到黑暗时,我得到系统颜色的深色版本和资产目录颜色的浅色版本.
在调试器外部,切换到暗模式可以工作,但初始加载总是变为浅色.
Dar*_*ust 13
更改系统外观不会更改当前外观,您可以查询和设置该外观,并且与系统外观无关.但是外观实际上取决于"拥有"视图,因为在同一视图层次结构中,由于活力并且还在appearance
视图上手动设置属性,可能会出现几种外观.
可可已经更新当前的外观在少数情况下,如在drawRect:
,updateLayer
,layout
和updateConstraints
.在其他地方,你应该这样做:
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];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1211 次 |
最近记录: |