主页 在 macOS 上使用 SwiftUI 创建模糊的窗口背景
Post
Cancel

在 macOS 上使用 SwiftUI 创建模糊的窗口背景

我一直在尝试将 SwiftUI 用于一些原生 macOS 应用程序,但最初无法解决这个问题。如果您想从 SwiftUI 为您的 macOS 应用程序提供现代模糊的窗口背景,则没有内置的方法可以做到这一点(或者至少我可以找到,如果有,请告诉我!)。幸运的是,执行此操作的代码简短而简单。

首先,我们需要将视图的背景设置为 NSVisualEffectView. 该类或等效类在 SwiftUI 中尚不可用,因此我们必须创建一个NSViewRepresentable以将其公开给 SwiftUI:

1
2
3
4
5
6
7
8
9
10
struct VisualEffectView: NSViewRepresentable {
    func makeNSView(context: Context) -> NSVisualEffectView {
        let effectView = NSVisualEffectView()
        effectView.state = .active
        return effectView
    }

    func updateNSView(_ nsView: NSVisualEffectView, context: Context) {
    }
}

一旦你有了它,你可以将它添加background到你窗口的主要内容视图中。不是必需的ignoresSafeArea(),但如果您想使用全尺寸内容视图并让内容位于窗口标题栏下方,看起来会更好。

1
2
3
4
5
6
struct BlurredWindowContentView: View {
    var body: some View {
        content
            .background(VisualEffectView().ignoresSafeArea())
    }
}

progress

这就是你需要做的。这是 macOS 12.3 的屏幕截图:

窗口模糊截图 SwiftUI 中 macOS 上的模糊窗口示例

如果你想要更多的配置VisualEffectView,你可以向可表示的结构添加额外的属性来配置底层的 NSVisualEffectView.

该博客文章由作者通过 CC BY 4.0 进行授权。

文章目录