在 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两种方式有什么区别?