减少OS X中的透明度设置会使弹出窗口中的NSButton中的白色文本消失

时间:2016-05-19 22:11:15

标签: macos nsattributedstring nsbutton nspopover

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

See here在GitHub上展示问题的示例项目。

这里发生了什么?

更新:我在2016年WWDC上与一位工程师谈过此事,他确认这是一个错误。我提交了一个雷达。他确实通过将相关按钮的外观设置为NSAppearanceNameAqua来设法在我的代码中修复它。

1 个答案:

答案 0 :(得分:1)

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

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

添加图层时,它会通过其drawRect方法位于按钮中绘制的任何图层之上。我的猜测是,当“减少透明度”选项打开时,文本所在区域的图层的不透明度会增加。如果你玩其他文字颜色,如黄色,你可以看到实际的颜色就像一个灰黄色,这支持了我怀疑文本区域的不透明度增加。