【问题标题】:Can't disable background blur with NSPopover无法使用 NSPopover 禁用背景模糊
【发布时间】:2015-03-08 17:21:37
【问题描述】:

当 NSPopover 在 10.10 中运行时,我无法让 NSPopover 恢复到 10.9 的外观。我有一个弹出框,它附加到用户拖动的 NSView 上。弹出框必须透明,以便用户仍然可以看到下方其他 UI 元素的位置。

在 10.9 下一切正常,但现在在 10.10 下使用 Apple 的新花哨模糊,我似乎无法在 10.10 上恢复相同的外观(除非像我一样,用户在系统偏好设置 > 辅助功能中启用了“降低透明度” . 我无法对最终用户强制执行的偏好更改!)。

试过了:

self.draggingPopover.appearance = NSPopoverAppearanceHUD;
self.popoverView.superview.appearance = [NSAppearance appearanceNamed:NSAppearanceNameAqua];
self.popoverView.appearance = [NSAppearance appearanceNamed:NSAppearanceNameAqua];

这些都不会影响弹出框在屏幕上的外观。

drawRect 在我的视图子类中用我选择的颜色填充背景,但忽略 alpha 值并且弹出框是不透明的。

同样,我可以使用self.popoverView.layer.backgroundColor = ...,但那里的 alpha 值也被忽略了!

【问题讨论】:

  • 似乎从 10.10 开始弹出内容视图的超级视图 (NSPopoverFrame) 以完全不透明的方式绘制,因此无论您在内容视图中做什么,都不支持透明度。
  • 你有没有让这个工作?

标签: cocoa osx-yosemite nspopover


【解决方案1】:

用途:

[popover setAppearance:(NSPopoverAppearance)[NSAppearance appearanceNamed:NSAppearanceNameAqua]];

【讨论】:

  • 不幸的是,我得到的结果与在视图上设置外观相同。模糊被禁用,但我无法在视图的背景中绘制任何透明度。我什至尝试在内容视图的超级视图 (NSPopoverFrame) 上设置 layer.backgroundColor,但它再次忽略了任何透明度。
【解决方案2】:

如果要求弹出框是透明的(无论将来对弹出框进行任何设计更改),您是否可以将弹出框窗口(即 popoverView 的 -window)的 alphaValue 设置为其他值

【讨论】:

  • 否,因为内容也是透明的。我只需要背景为 50% 的不透明度,但顶部的文本为 100% 的不透明度。
【解决方案3】:

您也可以在情节提要中设置Aqua 外观。选择NSPopover 的内容视图并使用此设置:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 2016-06-14
    相关资源
    最近更新 更多