NSProgressIndicator无法将背景颜色设置为白色

Ada*_*hns 6 macos cocoa nsprogressindicator swift

当我将进度指示器的背景设置为绿色时,它会按预期工作.

代码:

loadingIndicator.wantsLayer = true
loadingIndicator.layer?.backgroundColor = NSColor.greenColor().CGColor
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

但是当我将背景颜色设置为白色时,背景颜色保持灰色(而不是变为白色).

代码:

loadingIndicator.wantsLayer = true
loadingIndicator.layer?.backgroundColor = NSColor.whiteColor().CGColor
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

为什么将背景颜色设置为白色不起作用,但绿色呢?我该如何纠正这个问题?我在OS X 10.11.4上.

编辑:这显然只有当进度指示器位于以弹出窗口显示的视图内时才会发生.

小智 5

我在 NSPopover 中使用 NSProgressIndicator 时遇到了同样的问题。

我的解决方案是将外观设置为如下所示的弹出框。

popover.appearance = NSAppearance(named: NSAppearanceNameAqua)
Run Code Online (Sandbox Code Playgroud)
  • 在 OSX 10.11.5 / Xcode7.3.1 上试过
  • 除了 NSAppearanceNameVibrantDark 之外的任何其他名称也有效

我不确定为什么会发生这种情况,但是在设置属性后,我得到了正确的白色背景颜色。

屏幕截图:popover 内的白色背景进度


IMc*_*D23 4

我找到了解决这个问题的方法。NSProgressIndicator 的 CALayer 有一个子图层,显示您所看到的着色背景颜色。隐藏该子层将导致不显示任何背景,并保持微调器可见。

CALayer *layer = [[self popoverProgressIndicator] layer];
CALayer *backgroundLayer = [[layer sublayers] firstObject];
[backgroundLayer setHidden:YES];
Run Code Online (Sandbox Code Playgroud)

我仅在 NSPopover 内部使用此处的解决方案来更改背景时才看到此问题。