IOS SWIFT开发–导航到新视图,NavigationLink 和sheet两种方式有什么区别?

 在 SwiftUI 中,sheet 和通过 NavigationLink 导航到新视图是两种不同的导航方式,它们在用户体验和功能上有所区别:

sheet

  • 模态呈现sheet 是一种模态呈现方式,它会从底部滑入,覆盖当前视图。
  • 独立性:使用 sheet 显示的视图与当前视图是独立的,用户可以单独与之交互,不会影响背后的视图。
  • 关闭方式sheet 通常需要提供一个关闭按钮或者让用户在空白区域点击来关闭,不会自动显示返回按钮。
  • 屏幕占有率sheet 默认情况下不会占据整个屏幕,它通常只占据部分屏幕空间。
  • 使用场景:适用于临时展示一些信息或选项,比如设置、表单输入等。
struct ContentView: View {
    @State private var showingSheet = false

    var body: some View {
        Button("Show Sheet") {
            showingSheet.toggle()
        }
        .sheet(isPresented: $showingSheet) {
            MySheetView()
        }
    }
}

struct MySheetView: View {
    var body: some View {
        Text("This is a sheet")
            .presentationDetents([.medium, .large]) // iOS 15+ 可以调整sheet的大小
    }
}

NavigationLink

  • 导航栈NavigationLink 会将新视图推入导航栈,从而创建一个视图层次结构。
  • 返回按钮:使用 NavigationLink 导航到的新视图通常会自动显示一个返回按钮(在左上角),用户可以通过点击这个按钮返回上一个视图。
  • 屏幕占有率NavigationLink 导航到的视图通常会占据整个屏幕。
  • 使用场景:适用于在应用的不同部分之间进行导航,比如列表项的详细视图。
struct ContentView: View {
    var body: some View {
        NavigationView {
            List {
                NavigationLink(destination: MyDetailView()) {
                    Text("Go to Detail View")
                }
            }
            .navigationBarTitle("Home", displayMode: .inline)
        }
    }
}

struct MyDetailView: View {
    var body: some View {
        Text("This is a detail view")
            .navigationBarTitle("Detail", displayMode: .inline)
    }
}

总结来说,选择 sheet 还是 NavigationLink 取决于你的具体需求和期望的用户体验。如果需要临时显示内容并且不需要返回栈,sheet 是更好的选择。如果你需要用户在多个视图之间导航,并且希望保留返回路径,那么 NavigationLink 更适合。 ​

IOS SWIFT开发–导航到新视图,NavigationLink 和sheet两种方式有什么区别?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Scroll to top