【问题标题】:Replacing NSStatusBarButton NSView to disable vibrancy替换 NSStatusBarButton NSView 以禁用活力
【发布时间】:2020-01-31 08:46:23
【问题描述】:

我目前正在尝试减少添加到 Mac OS 中 NSStatusBarItems 图标的默认活力。我知道这可以通过更改allowsVibrancy 属性来实现。但是,由于它在 NSView 上是只读的,因此我需要扩展该类并覆盖 allowVibrancy 方法。

class NoneVibrancyView: NSView
{
    override var allowsVibrancy: Bool { return false }
}

目前,我的图标仍然看起来像 allowVibrancy 已激活。我想知道我是否正确替换了我的 NSView。这是我的代码:

let statusBar = NSStatusBar.system

statusBarItem = statusBar.statusItem(withLength: NSStatusItem.squareLength)

let noneVibrancyView = NoneVibrancyView(frame: statusBarItem.button!.frame)

statusBarItem.button?.addSubview(noneVibrancyView)

statusBarItem.button?.title = "????"

let statusBarMenu = NSMenu(title: "My Status Menu Bar")

statusBarItem.menu = statusBarMenu

【问题讨论】:

  • 你能检查你的父 NSButton 是否仍然充满活力 = true 吗?
  • 您好,感谢您的回复。 statusBarItem.button?.allowsVibrancy = true。所以这不是我想要的。你知道我怎么能改变它吗? @Maschina
  • 据我了解,活力是由父视图控制的。因此,如果父级允许活力,则子视图无法影响它。出于好奇,您可以尝试将 NSButton 子类化并设置 allowVibrancy = false 吗?
  • 是的,但是如何替换 NSStatusBarItem 上的按钮?
  • 没关系,我需要在 NSView 中添加 'open' 作为它的声明。它现在正在工作!谢谢!要回答这个问题以便我批准吗?

标签: swift nsstatusitem nsstatusbar


【解决方案1】:

子视图的活力将被其父视图的活力覆盖。因此,需要设置作为自定义视图父级的状态栏按钮的活力(由于addSubview())。

由于状态项的按钮是自动生成的,您可能需要为此使用扩展:

extension NSStatusBarButton { 
    override open var allowsVibrancy: Bool { return false } 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    相关资源
    最近更新 更多