在SwiftUI
中我们使用NavigationView
框架来处理页面导航。
import SwiftUI
struct DestinationView: View {
var body: some View {
Text("Destination View")
}
}
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink(
destination: DestinationView()
label: {
Text("Navigate")
})
}
}
}
在某些情况下,我们不想要destination
使用SwiftUI
自带的顶栏标题栏,而想用自己的,这时候我们会通过.navigationBarHidden(true)
来隐藏标题栏。示例代码如下:
import SwiftUI
struct DestinationView: View {
var body: some View {
Text("Destination View")
.navigationBarHidden(true) // 追加后destination不再出现标题栏
}
}
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink(
destination: DestinationView(),
label: {
Text("Navigate")
})
}
}
}
然而这又产生了一个新的问题,没有了标题栏,那么页面需要返回的时候怎么做?
这时候就需要用到SwiftUI
的Environment
中的属性presentationMode
。示例代码如下:
import SwiftUI
struct DestinationView: View {
// 追加代码1:声明属性presentationMode
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
var body: some View {
Text("Destination View")
.navigationBarHidden(true) // 追加后destination不再出现标题栏
.onTapGesture {
// 追加代码2:点击"Destination View"后返回
self.presentationMode.wrappedValue.dismiss()
}
}
}
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink(
destination: DestinationView(),
label: {
Text("Navigate")
})
}
}
}
网友评论