隐藏导航栏但保留后退按钮 - SwiftUI

Hide navigation bar but keep back button - SwiftUI

提问人:spoax 提问时间:4/7/2021 最后编辑:spoax 更新时间:4/12/2021 访问量:2955

问:

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

我尝试隐藏整个导航栏并使用 a 添加一个自定义后退按钮,但是当我按下后退键时,我在第一个视图 () 上得到了一个后退按钮,这在以前是不存在的。NavigationLinkProductList

如果我必须创建自定义后退按钮,是否有一种不同于我使用的方法来消除导航后退时出现的后退按钮?NavigationLinkTab1ViewProductList

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

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

然后我使用一个我隐藏的地方:TabBarNavigationBar

 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)
        }
    }
}

最后,我添加自己的自定义后退按钮:ViewTabbar

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

评论

0赞 Asperi 4/7/2021
“后退”按钮是导航栏不可或缺的一部分。如果隐藏栏,则需要自定义后退按钮。
0赞 spoax 4/8/2021
@Asperi - 谢谢,我已经使用 NavigationLink 添加了一个自定义后退按钮,它在代码的最后一位:NavigationLink(destination: ProductList()){ Image(systemName: “chevron.backward”) }。通过这样做,它会导致我的原始视图 ProductList 有一个后退按钮,而原来的没有后退按钮,如果这有意义吗?

答:

2赞 binaryPilot84 4/7/2021 #1

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

.navigationBarTitle("", displayMode: .inline)

除此之外,您需要保持导航栏可见。否则,SwiftUI 将不会显示要返回的导航链接。

评论

0赞 spoax 4/7/2021
谢谢,这确实隐藏了我想要的东西,但不幸的是,它保留了顶部的填充,所以一切都在向下移动。如果我将全部隐藏在一起,它会删除我所追求的填充。NavigationBarNavigationBarNavigationBar
0赞 binaryPilot84 4/7/2021
在这种情况下,最好的办法是使用 ZStack 在顶部放置一个按钮,以充当后退按钮。
0赞 spoax 4/7/2021
谢谢,我已经有一个 ZStack 和一个 NavigationLink,它在代码的最后一位:NavigationLink(destination: ProductList()){ Image(systemName: “chevron.backward”) }。通过这样做,它会导致我的原始视图 ProductList 有一个后退按钮,而原来的没有后退按钮,如果这有意义吗?
2赞 spoax 4/12/2021 #2

我似乎已经解决了我的问题,遵循这个并使用@Environment

因此,与其像这样在我的最后一个选项卡中使用 a: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)