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)
好了,现在菜单栏有一个高质量且大小适合的图标了~~~