关于SwiftUI手动返回NavigationLink的方法

·  阅读 126

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")
                })
        }
    }
}
复制代码

然而这又产生了一个新的问题,没有了标题栏,那么页面需要返回的时候怎么做?

这时候就需要用到SwiftUIEnvironment中的属性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")
                })
        }
    }
}
复制代码
分类:
iOS
标签: