SwiftUI:使用NavigationLink将新视图压入堆栈

译自 Pushing new views onto the stack using NavigationLink

SwiftUI的NavigationView在视图顶部显示一个导航栏,但它还执行其他操作:它使我们可以将视图压入视图堆栈。实际上,这实际上是iOS导航的最基本形式——点击Wi-Fi或通用时,您可以在“设置”中看到它;或者点击某人的名字,则可以在“消息”中看到它。

该视图堆栈系统与我们之前使用的sheet()完全不同。是的,两者都显示出某种新视图,但是它们的呈现方式存在差异,这会影响用户对它们的看法。

让我们先看一些代码,以便您自己看看。如果我们将默认的文本视图与导航视图一起包装并为其指定标题,则会得到以下信息:

struct ContentView: View {
    var body: some View {
        NavigationView {
            VStack {
                Text("Hello World")
            }
            .navigationBarTitle("SwiftUI")
        }
    }
}

该文本视图只是静态文本。它不是带有任何操作的按钮。我们将做到这一点,以便当用户点击“ Hello World”时,向他们展示一个新视图,并使用NavigationLink完成:为该视图提供一个目的地以及可以点击的内容,它将处理其余部分。

要尝试此操作,请将您的视图更改为:

NavigationView {
    VStack {
        NavigationLink(destination: Text("Detail View")) {
            Text("Hello World")
        }
    }
    .navigationBarTitle("SwiftUI")
}

现在运行代码,看看你能看到什么。您会看到“Hello World”现在看起来像一个按钮,点击它会在右侧显示一个新视图,即“Detail View”。更好的是,您会看到“SwiftUI”标题会向上移动变为后退按钮,您可以点击该按钮或从左边缘滑动以返回。

因此,sheet()NavigationLink都允许我们从当前视图显示一个新视图,但是它们的执行方式有所不同,您应该谨慎选择它们:

  • NavigationLink用于显示有关用户选择的详细信息,就像您正在深入探讨主题一样。
  • sheet()用于显示不相关的内容,例如设置或撰写窗口。

您在NavigationLink上看到的最常见的地方是列表,SwiftUI的功能非常出色。

尝试将您的代码修改为如下:

NavigationView {
    List(0..<100) { row in
        NavigationLink(destination: Text("Detail \(row)")) {
            Text("Row \(row)")
        }
    }
    .navigationBarTitle("SwiftUI")
}

现在,运行该应用程序时,您会看到100个可以点击以显示详细视图的列表行,但是您还会在右侧看到灰色的显示指示器。这是一种标准的iOS方法,告诉用户在点击该行时另一个屏幕将从右侧滑动,而SwiftUI足够聪明,可以在此处自动添加它。如果这些行不是导航链接——如果您注释掉NavigationLink行及其右括号——您会看到该指示器消失。

SwiftUI:ScrollView如何让我们处理滚动数据 Hacking with iOS: SwiftUI Edition Swift:处理多级Codable数据

赏我一个赞吧~~~

你可能感兴趣的:(SwiftUI:使用NavigationLink将新视图压入堆栈)