Swift 导航栏:";隐藏“;标题,但保留它以供后续的“后退”按钮使用

Swift 导航栏:";隐藏“;标题,但保留它以供后续的“后退”按钮使用,swift,swiftui,uinavigationcontroller,Swift,Swiftui,Uinavigationcontroller,在我的应用程序中,我有两个SwiftUI视图,我们称它们为View1和View2。View1作为UIHostingController启动,并具有“转到View2”按钮,该按钮可在所述UIHostingController的导航控制器上按下View2(无SwiftUI导航链接等)。 View1必须显示导航栏,因为它在工具栏中有一个自定义的“退出”按钮。VIEW2应该显示“您可能需要考虑一个隐藏的导航链接,这样就可以得到您正在寻找的推送行为。这将给您留下以下视图; struct View1: Vi

在我的应用程序中,我有两个SwiftUI视图,我们称它们为View1和View2。View1作为UIHostingController启动,并具有“转到View2”按钮,该按钮可在所述UIHostingController的导航控制器上按下View2(无SwiftUI导航链接等)。
View1必须显示导航栏,因为它在工具栏中有一个自定义的“退出”按钮。VIEW2应该显示“您可能需要考虑一个隐藏的导航链接,这样就可以得到您正在寻找的推送行为。这将给您留下以下视图;

struct View1: View {
    @State private var isActive = false

    var body: some View {
        NavigationView {
            VStack {
                Button("Present") {
                    isActive = true
                }

                NavigationLink(destination: View2(), isActive: $isActive) {
                    EmptyView()
                }.hidden()
            }.toolbar(content: {
                Button("Exit") {
                    print("Exit view")
                }
            })
        }
    }
}

您的第一个视图将使用按钮通过推送动画显示视图2。为您提供所需的后退按钮行为。您的第一个视图在右上角的工具栏中没有标题和退出按钮。

不幸的是,包括工具栏按钮在内的整个导航逻辑都是通过UIHostingController和是必须保留的。不允许在swift UI中使用导航链接,因为这会弄乱现有的导航控制器,这可能会导致奇怪的问题。好的,所以您基本上希望从swiftUI中操作UIKit navigationbar。但我不确定这种方法是否正确。您将不得不进行大量自定义工作要保留默认的iOS行为。我会将退出按钮及其逻辑添加到您的SwiftUI视图中。然后,您可以将
view1
显示为
UIHostedViewController
,并在SwiftUI中保留默认的导航栏行为。如果不可能,您能否为我提供一个复制该问题的小示例?
struct View2: View {
    var body: some View {
        NavigationView {
            Text("View 2")
        }
    }
}