热门标签 | HotTags
当前位置:  开发笔记 > IOS > 正文

当视图位于SwiftUI的TabView中时,导航视图标题不会出现

如何解决《当视图位于SwiftUI的TabView中时,导航视图标题不会出现》经验,为你挑选了1个好方法。

我有两个视图,每个视图都包含带有标题的NavigationView。我创建了一个TabBar视图,上面也带有NavigationView。

struct TabbarView: View {
var body: some View {
    NavigationView{
    TabView {
        MainContentView()
            .tabItem {
                VStack {
                    Text("Main")
                }
        }.tag(0)

        SearchContentView()
            .tabItem {
                VStack {
                    Text("Search")
                }
        }.tag(1)
    }
    }.navigationBarBackButtonHidden(true)
    .navigationBarHidden(true)
}

}

我曾尝试隐藏此视图的navigationBar,但这不起作用。仅此视图的导航栏出现。

这是 MainContentView()

struct MainContentView: View {

var body: some View {
    NavigationView {
        Text("Some Content View")
        }
    .navigationBarTitle("Travel")
}

}

任何想法如何去做。谢谢!

更新:基本上,当我点击“ 登录”按钮时,我正在通过NavigationLink传递TabBarView()。

   NavigationLink(destination: TabbarView()) {
                        HStack {
                            Text("Log In")
                        }
                        .padding()
                        .frame(width: geometry.size.width - 40, height: 40)
                        .foregroundColor(Color.white)
                        .background(Color.blue)
                        .cornerRadius(5)
                }.padding(.bottom, 40)

这样做时,它显示了带有子视图的TabbarView(),这就是我看到的:因为我将其推入navigationStack中,所以“旅行”(childView的navigationBarTitle)上方的空间就是该标签栏的navigationBar。



1> graycampbell..:

这里要指出的第一件事是,您代码中的所有导航栏修饰符应为内的视图上的NavigationView修饰符,而不是NavigationView其本身上的修饰符。从的文档中.navigationBarTitle,例如:

仅当此视图在NavigationView内部并在NavigationView中可见时,此修饰符才生效。

另外,您也无需在内NavigationView包装TabView另一个MainContentView。这只会导致嵌套的导航栏,而您绝对不希望那样。相反,只需使用一个NavigationView。我也建议你不要把NavigationView里面MainContentView的身体。

我已经重构了您的代码以显示我在说什么,尽管我不确定您在哪里尝试使用.navigationBarBackButtonHiddenand .navigationBarHidden,所以我省略了它们。只需记住它们的功能就像.navigationBarTitle-您需要将它们用作内部视图的修饰符NavigationView,而不是NavigationView其本身。

struct TabBarView: View {
    var body: some View {
        TabView {
            NavigationView {
                MainContentView()
            }
            .tag(0)
            .tabItem {
                Text("Main")
            }

            SearchContentView()
                .tag(1)
                .tabItem {
                    Text("Search")
                }
        }
    }
}
struct MainContentView: View {
    var body: some View {
        Text("Some Content View")
            .navigationBarTitle("Travel")
    }
}

正如你可能会注意到,我也去掉了VStack.tabItem。你可以把两者TextImage.tabItem而不需要一个VStack,如果我没有记错,.tabItem忽略任何不TextImage呢。


推荐阅读
author-avatar
深深i
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有