繁体   English   中英

隐藏导航栏但保留返回按钮 - SwiftUI

[英]Hide navigation bar but keep back button - SwiftUI

是否可以隐藏/删除NavigationBar但保持后退按钮可见?

我曾尝试隐藏整个导航栏并使用NavigationLink添加自定义后退按钮,但是当我按下之前没有的后退按钮时,我在第一个视图( ProductList )上得到了一个后退按钮。

如果我必须创建一个自定义后退按钮,是否有与NavigationLink不同的方式,就像我在Tab1View中使用的那样,在导航返回时消除出现在ProductList中的后退按钮?

这是第一个使用NavigationLinkTabBar的视图:

struct ProductList: View {
    ScrollView{
        VStack{
            ForEach(matchedItems) { item in
                NavigationLink(destination: TabView(product: item)){
                        Text("MoveToTabView")
                   }
                }
            }
         }
    }
}

然后,我在隐藏NavigationBar的地方使用TabBar

 struct TabView: View {
    var product: ProductModel
    var body: some View {
        TabView {
            // TAB 1
            Tab1View(product: product).tabItem {
                    Text(product.detailTabNames[0])
                }
                .navigationBarTitle("")
                .navigationBarHidden(true)
            // TAB 2
            Tab2View(product: product).tabItem {
                    Text(product.detailTabNames[1])
                }
                .navigationBarTitle("")
                .navigationBarHidden(true)
        }
    }
}

最后是来自Tabbar的最终View ,我在其中添加了我自己的自定义后退按钮:

struct Tab1View: View {
    var product: ProductModel
    var body: some View {
        ZStack(alignment: .topLeading) {
            Text("Tab1View")
            NavigationLink(destination: ProductList()){
                Image(systemName: "chevron.backward")
            }
        }
    }
}

为了保留后退导航功能,您仍然需要导航栏。 使用您想要的视图执行此操作的方法是:

.navigationBarTitle("", displayMode: .inline)

除此之外,您需要保持导航栏可见。 如果不这样做,SwiftUI 将不会显示返回 go 的导航链接。

我似乎通过遵循这个并使用@Environment解决了我的问题

因此,不要像这样在我的最终选项卡中使用NavigationLink

ZStack(alignment: .topLeading) {
            Text("Tab1View")
            NavigationLink(destination: ProductList()){
                Image(systemName: "chevron.backward")
            }
}

我现在正在使用一个按钮,使用@Environment关闭这样的视图:

struct Tab1View: View {

@Environment(\.presentationMode) var presentation

    var product: ProductModel
    var body: some View {
        ZStack(alignment: .topLeading) {
            Text("Tab1View")
            Button(action: {
                self.presentation.wrappedValue.dismiss()
            }, label: {
                Text("PressMe")
            })
        }
    }
}   

 

这样做可以让我以同样的方式在 TabView 中隐藏NavigationBar

.navigationBarTitle("")
.navigationBarHidden(true)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM