You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

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

火山引擎 最新活动