🖥
FluidMenuBarExtra

一个轻量级的工具,用于使用 SwiftUI 构建出色的菜单栏附加组件。

GitHub issues GitHub contributors GitHub stars GitHub license

Menu Sample

关于

SwiftUI 内置的 MenuBarExtra API 可以轻松地用纯 SwiftUI 创建菜单栏应用程序。但是,当前的 WindowMenuBarExtraStyle 实现存在局限性,因为它在关闭时不会像传统菜单项那样淡出,菜单打开时不会保持选择状态,并且使用的调整大小机制不够理想,这会让您的应用程序感觉不够完善。

FluidMenuBarExtra 是一个轻量级软件包,它提供了一个方便的 API,用于在 AppKit 和 SwiftUI 应用程序中使用 SwiftUI 创建无缝的菜单栏附加组件。一旦 MenuBarExtra 在 macOS 的未来版本中得到改进,切换回 MenuBarExtra 就像将几行 SwiftUI 代码移回您的 App 一样简单。

主要特性

用法

要使用 FluidMenuBarExtra,请在应用程序的生命周期内初始化一次 FluidMenuBarExtra。如果需要多个菜单栏附加组件,则可以存在多个 FluidMenuBarExtra 实例。

首先,定义一个应用程序委托。不用担心,您应用程序的入口点仍然基于 SwiftUI。

class AppDelegate: NSObject, NSApplicationDelegate {
    private var menuBarExtra: FluidMenuBarExtra?

    func applicationDidFinishLaunching(_ notification: Notification) {
        self.menuBarExtra = FluidMenuBarExtra(title: "My Menu", systemImage: "cloud.fill") {
            Text("My SwiftUI View")
        }
    }
}

然后,使用 @NSApplicationDelegateAdaptor 属性包装器将委托附加到您的 SwiftUI 应用程序

import SwiftUI

@main
struct MyApplication: App {
    @NSApplicationDelegateAdaptor private var appDelegate: AppDelegate

    var body: some Scene {
        Settings {
            SettingsTabs()
        }
    }
}

就是这样!只要 FluidMenuBarExtra 的引用存在,菜单栏附加组件就会被安装。当引用被删除或设置为 nil 时,该项将从菜单栏中删除。

💡 提示: 如果需要在菜单栏附加组件和其他窗口之间共享任何有状态的属性或实用程序,可以将这些属性移动到您的 AppDelegate。要允许 SwiftUI 视图使用已发布的属性,请使委托类符合 ObservableObject。然后,SwiftUI 将自动将委托插入到环境中。了解更多

注意事项

贡献

欢迎所有贡献。如果您需要这种软件包,请随时解决任何问题并添加任何可能有用的功能。

许可证

除非另有说明,否则 FluidMenuBarExtra 是在 MIT 许可证 下发布的。