SwiftUI在macOS NavigationView中关闭视图

时间:2019-12-16 17:22:31

标签: swift macos navigation swiftui

详细介绍here(在iOS主题上),以下代码可用于使SwiftUI View自行关闭:

@Environment(\.presentationMode) var presentationMode
// ...
presentationMode.wrappedValue.dismiss()

但是,此方法不适用于本机(非Catalyst)macOS NavigationView设置(例如以下设置),在该设置中,所选视图显示在List旁边。

理想情况下,当这些子视图中的任何一个使用上面的方法时,该列表将回到未选择任何内容的状态(例如首次启动时);但是,关闭功能似乎无能为力:视图仍然完全相同。

这是bug,还是预期的macOS行为?

还有另一种方法可以代替吗?

struct HelpView: View {

    var body: some View {

        NavigationView {
            List {
                NavigationLink(destination:
                    AboutAppView()
                ) {
                    Text("About this App")
                }
                NavigationLink(destination:
                    UserGuideView()
                ) {
                    Text("User Guide")
                }
            }
        }
    }
}

struct AboutAppView: View {

    @Environment(\.presentationMode) var presentationMode

    public var body: some View {
        Button(action: {
            self.dismissSelf()
        }) {
            Text("Dismiss Me!")
        }
    }

    private func dismissSelf() {
        presentationMode.wrappedValue.dismiss()
    }
}

仅供参考:真正的目的是针对不太直接的场景(例如,在完成任务时从Alert触发);这里的按钮设置只是为了简单起见。

1 个答案:

答案 0 :(得分:1)

这里的解决方案很简单。不要在需要关闭视图的地方使用导航视图。

检查Apple git submodule update [<path>]

给出的示例

如果您需要可忽略的视图,则有两种方法。

  1. 创建一个新的模式窗口https://developer.apple.com/tutorials/swiftui/creating-a-macos-app
  2. 使用表格。

以下是使用SwiftUI在macOS中的隐含说明

cmd

还有第三个选项,可使用ZStack在RootView中创建模态卡并更改不透明度以显示和隐藏动态数据。