gpt4 book ai didi

cocoa - 更新深色模式: NSColor ignores appearance changes?

转载 作者:行者123 更新时间:2023-12-03 16:04:36 25 4
gpt4 key购买 nike

在我的 Web View 中,我使用 CSS 变量在运行时更改各种颜色,具体取决于是否启用 macOS 10.14 的深色模式。就这么多,工作正常。棘手的部分是当系统外观发生变化时更新颜色。

我通过观察窗口上的 effectiveAppearance 属性来检测更改。该通知按预期发送,但是当我去更新颜色时,NSColor 仍然为我提供深色模式颜色(或应用程序启动时的任何模式)。例如,当我响应从暗模式到亮模式的切换时,NSColor.textColor 仍然是白色而不是黑色。我自己的颜色资源似乎也发生了同样的情况。

是否有不同的方式或时间来获取这些颜色?或者这可能是操作系统错误?

编辑:我还尝试创建 WebView 的子类,并在 Web View 的有效外观名称发生变化时更新 drawRect() 中的颜色。第一次,我得到了所有浅色,即使应用程序在深色模式下启动也是如此。之后,当我从浅色模式切换到深色模式时,我会得到系统颜色的深色版本和 Assets 目录颜色的浅色版本。

在调试器之外,可以切换到深色模式,但初始加载始终会获得浅色。

最佳答案

更改系统外观不会更改当前外观,which you can query and set and is independent from the system appearance 。但外观实际上取决于“拥有” View ,因为在同一 View 层次结构中,由于活力以及在 View 上手动设置 appearance 属性,可能会出现多种外观。

cocoa 已经updates the current appearance在某些情况下,例如在 drawRect:updateLayerlayoutupdateConstraints 中。在其他地方,您应该这样做:

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];

关于cocoa - 更新深色模式: NSColor ignores appearance changes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52504872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com