【问题标题】:Disable vibrancy for every NSView禁用每个 NSView 的活力
【发布时间】:2016-11-29 02:29:31
【问题描述】:

NSPopover 中,一些子视图(例如标签、按钮)会自动启用活力。当弹出框后面的内容为深色时,这会使我的应用看起来很糟糕,除非用户在系统偏好设置中打开“降低透明度”。如果我将弹出框的内容视图子类化,并将allowsVibrancy 设置为false,它会使整个弹出框半透明,看起来更好。但是,我认为我的应用在完全禁用活力时看起来最好。

我的问题是,如何在不对每个 NSView 子类进行子类化的情况下禁用所有视图的活力?

【问题讨论】:

    标签: objective-c macos cocoa


    【解决方案1】:

    您可以通过此技巧将弹出框设置为使用纯色:

    How to change NSPopover background color include triangle part?

    【讨论】:

    • 禁用活力和设置自定义背景颜色不是一回事。禁用活力只会使视图不透明 - 它不会更改应与操作系统使用的主题(浅色或深色)相匹配的默认背景颜色。
    【解决方案2】:

    您可以通过将 Popover 的外观(或任何其他您想确保没有活力的视图)设置为具有 NSAppearanceNameAqua 外观来实现此目的。例如 popover.appearance = [NSAppearance appearanceNamed:NSAppearanceNameAqua];

    否则,默认情况下,弹出框将具有 VibrantLight 外观。

    【讨论】:

    • 设置NSAppearanceNameAqua的问题是即使OS主题设置为dark,popover也会一直使用light的外观。我发现在尊重 OS 主题的同时禁用透明度的唯一方法是将每个 NSView 子类化并将 allowsVibrancy 设置为 false。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多