首页 > 解决方案 > SwiftUI NavigationView 与 macOS 上的窗口内混合

问题描述

我正在尝试在 macOS 的 SwiftUI 中构建类似于 Maps.app 的 UI。我无法为工具栏和侧边栏应用窗口内混合模式。该应用程序的代码大致是这样的:

struct ContentView: View {
    @State private var region = MKCoordinateRegion(...)

    var body: some View {
        NavigationView {
            Sidebar()
            Map(coordinateRegion: $region)
        }
        .navigationTitle("New York, NY")
    }
}

作为参考,这是 Maps.app 的屏幕截图。可能很难看到,但是通过半透明的工具栏和侧边栏可以看到 Map 组件:

macOS 上的 Maps.app

使用上面的代码,我得到以下结果(从gi​​thub.com/jordansinger/maps-macos-swiftui-sample修改)。请注意,工具栏是纯白色的,侧边栏使用窗口后混合模式:

使用 SwiftUI 的地图组件

如果我放下NavigationView组件并.ignoresSafeArea()Map组件上设置,我会让工具栏变得半透明,但工具栏会占据窗口的全宽,而不是在侧边栏的边缘切割。使用这样的代码:

struct ContentView: View {
    @State private var region = MKCoordinateRegion(...)

    var body: some View {
        HStack {
            Sidebar()
            Map(coordinateRegion: $region)
                .ignoresSafeArea()
        }
        .navigationTitle("New York, NY")
    }
}

我得到以下结果。请注意,工具栏现在是半透明的:

没有 NavigationView 的半透明工具栏

出于特定目的,NavigationView应用程序中不需要,因为没有导航。我纯粹使用它来实现侧边栏和工具栏组合的正确外观,没有NavigationView.

所以,问题是是否可以NavigationView使用窗口内混合模式或完全替换它(但所需的外观类似于我们在 Maps.app 中的外观)。

标签: macosswiftuiswiftui-navigationview

解决方案


推荐阅读