SwiftUI MenuBarExtra 自定义图标

macOS Ventura 为状态栏提供了新 API – MenuBarExtra ,上手后会发现尽管sf图标非常简单方便,但是自定义图标无法按预期工作,SwiftUI 按图像的原始大小显示,即使.resizable()修饰符也没有任何效果,那么理所当然地就是导入合适大小的图像,然而即使是矢量图svg,图标大小是合适了,但是图像质量却大打折扣,图像被像素化了,这个问题困扰了好久,现在终于有完美的解决方案了

AppKit!!!

初始化一个NSImage 并缩放它,然后用它来初始化一个 SwiftUI Image。不幸的是NSImage不能按照图像比例所以需要手动计算它

MenuBarExtra {
    ContentView()
} label: {
    let image: NSImage = {
        let ratio = $0.size.height / $0.size.width
        $0.size.height = 18
        $0.size.width = 18 / ratio
        return $0
    }(NSImage(named: "icon")!)

    Image(nsImage: image)
}
.menuBarExtraStyle(.window)

好了,现在菜单栏有一个高质量且大小适合的图标了~~~

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注