Swift菜单栏图标消失问题:新手开发应用遇图标闪一下即消失
解决菜单栏图标闪烁消失的问题
嘿,我懂你现在的困惑——刚接触Swift做菜单栏应用,图标闪一下就没了确实挺闹心的😅。
问题根源其实很简单:你在applicationDidFinishLaunching里创建的statusItem是局部变量,方法执行完之后,Swift的自动引用计数(ARC)会把这个变量回收掉,对应的菜单栏按钮自然也就跟着消失了。
修复方案一步到位:
把statusItem改成你的AppDelegate类的实例属性,让它和AppDelegate的生命周期绑定,就不会被轻易回收了。
修改后的代码如下:
import Cocoa class AppDelegate: NSObject, NSApplicationDelegate { // 将statusItem声明为类的实例属性 private var statusItem: NSStatusItem? func applicationDidFinishLaunching(_ aNotification: Notification) { // 在这里初始化statusItem statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength) if let button = statusItem?.button { button.image = NSImage(named: NSImage.Name("StatusBarButtonImage")) // 之后需要添加点击事件的话,解开下面的注释即可 // button.action = #selector(printQuote(_:)) } } // 可选:如果你需要保留之前的点击事件方法 @objc func printQuote(_ sender: Any?) { print("Hello from menu bar!") } }
额外小提醒:
- 确认你的图片资源
StatusBarButtonImage已经正确添加到项目中,建议在Assets里把它设置为"Template Image",这样图标能自动适配系统的浅色/深色模式。 - 如果之后要加下拉菜单,只需要给
statusItem赋值一个NSMenu实例就行,比如statusItem?.menu = yourCustomMenu。
这样调整后,你的菜单栏图标应该就能稳定显示啦!
内容的提问来源于stack exchange,提问作者chubbyk




