OS X 中的 Reduce Transparency 设置使弹出窗口中 NSButton 中的白色文本消失

Reduce Transparency setting in OS X makes white text in NSButton in popover disappear

我正在开发一个 OS X 应用程序,它涉及带有网络视图的弹出窗口。网络浏览量已 drawsBackground 设置为 NO。有时,这些弹出窗口中有按钮,位于 Web 视图之上。这些按钮具有自定义背景颜色,并通过 NSAttributedString 设置了它们的文本颜色。但是,当“系统偏好设置”中的“降低透明度”设置处于打开状态时,白色文本就会消失。如果文本是任何其他颜色,它会显示 - 甚至清晰(虽然微弱)。

See here GitHub 上的示例项目演示了该问题。

这是怎么回事?

更新:我在 WWDC 2016 上与一位工程师谈过这个问题,他确认这是一个错误。我提交了一个雷达。他通过将相关按钮的外观设置为 NSAppearanceNameAqua.

来设法在我的代码中修复它

该问题与您的网络视图无关。我从其超级视图中删除了网络视图,但问题仍然存在。该问题与使用层有关。如果你注释掉 button.wantsLayer = YES,这个问题就不会再发生了,但是你就没有背景颜色了。如果您只使用层来设置背景颜色,还有其他方法可以在不使用层的情况下完成此操作。

[(NSButtonCell *)button.cell setBackgroundColor:[NSColor colorWithRed:112.0f / 255 green:107.0f / 255 blue:151.0f / 255 alpha:1]];

当您添加图层时,它位于通过其 drawRect 方法在按钮中绘制的任何内容之上。我的猜测是,当'Reduce Transparency'选项打开时,文本所在区域的图层的不透明度会增加。如果你尝试使用其他文本颜色(如黄色),你会发现实际颜色是灰黄色,这支持我怀疑文本区域的不透明度增加了。