ios - 当视图在 SwiftUI 中的 TabView 中时,NavigationView 标题不会出现
问题描述
我有两个视图,每个视图都包含带有标题的 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)
}
}
我曾尝试隐藏此视图的导航栏,但这不起作用。仅显示此视图的导航栏。
这是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(),这就是我所看到的:“Travel”上方的空间(childView 的navigationBarTitle)是标签栏的导航栏,因为我将它推入了navigationStack。
解决方案
这里首先要指出的是,您在代码中拥有的所有导航栏修饰符都应该是 . 内部视图上的NavigationView
修饰符,而不是NavigationView
本身的修饰符。从 的文档中.navigationBarTitle
,例如:
此修饰符仅在此视图位于 NavigationView 内部且可见时才生效。
此外,没有必要在你NavigationView
的. 这只会导致嵌套导航栏,您绝对不希望这样。相反,只需使用一个. 我还建议你不要把身体放在里面。TabView
MainContentView
NavigationView
NavigationView
MainContentView
我已经重构了你的代码以显示我在说什么,虽然我不确定你在哪里尝试使用.navigationBarBackButtonHidden
and .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
from .tabItem
。您可以在不需要 a 的情况下将两者Text
都放在Image
里面,如果我没记错的话,忽略任何不存在的东西或无论如何。.tabItem
VStack
.tabItem
Text
Image
推荐阅读
- json - json.Unmarshal 忽略 json 字符串中的 json 字符串值,不要尝试解析它
- spring - 我想知道spring-data的命名约定
- html - 如何设置 html“选择”元素的选项位置?
- asynchronous - IRC | 异步通信
- git - heroku App 与带有 git 的 buildpack 不兼容
- c# - NEST:创建别名并设置过滤器
- android - 使用 Dialog 时,只有创建视图层次结构的原始线程才能接触其视图
- oracle - 如何删除oracle utf文件中的输入
- c++ - 内部类引用的编译问题
- angular - 基于值变化的角度条件验证器