从 NSVisualEffectView 活力中选择退出无边界 NSButton

Opt-out borderless NSButton from NSVisualEffectView vibrancy

我有一个充满活力的 NSVisualEffectView,其中包含文本字段(NSTextField 或 NSComboBox)和无边框按钮。这些按钮位于文本字段上方,我想禁用无边框按钮的活力效果,因为它们应该出现在文本字段的白色背景上。

根据 NSVisualEffectView class 参考中的建议,我尝试做的是将我的 NSButton 包装在另一个 NSVisualEffectView 中,并将其状态设置为 Inactive。它的作用是将 "vibrant" 背景替换为浅灰色背景。

下图说明了这一点。第一个字段是我尝试的解决方案,第二个字段显示无边框按钮作为 NSVisualEffectView 的子项的默认行为。

我也试过 subclass NSButton 并将其单元格背景颜色设置为白色或透明,但我总是得到灰色背景。

如何将浅灰色背景更改为白色或透明背景? 谢谢

经过几个小时的头痛,我设法自己解决了这个问题。该解决方案不需要将按钮包装在 NSVisualEffectView 中。简单地继承 NSButton 并覆盖 allowsVibrancy 属性 并将其设置为 false 就足够了。

在Swift中:

override var allowsVibrancy: Bool { return false }