我有两个视图,每个视图都包含带有标题的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(),这是我看到的:“Travel”(childView的navigationBarTitle)上方的空间是选项卡栏的navigationBar,因为我将其推入navigationStack。
4条答案
按热度按时间2q5ifsrm1#
首先要指出的是,代码中的所有导航栏修饰符都应该是
NavigationView
内部视图上的修饰符,而不是NavigationView
本身上的修饰符。从.navigationBarTitle
的文档中,例如:此修改器仅在此视图位于NavigationView内部且在其中可见时生效。
此外,没有必要让一个
NavigationView
包裹你的TabView
,然后在你的MainContentView
里面再放一个。这只会导致导航栏嵌套,你肯定不希望这样。只需要一个NavigationView
。我还建议你不要把NavigationView
放在MainContentView
体内。我已经重构了您的代码以显示我所谈论的内容,尽管我不确定您试图在哪里使用
.navigationBarBackButtonHidden
和.navigationBarHidden
,所以我省略了它们。请记住,它们的功能就像.navigationBarTitle
一样--您需要在NavigationView
内部的视图上使用它们作为修改器,而不是在NavigationView
本身上。您可能已经注意到,我还从
.tabItem
中删除了VStack
。您可以将Text
和Image
都放入.tabItem
中,而不需要VStack
,如果我没有弄错的话,.tabItem
会忽略任何不是Text
或Image
的内容。bxpogfeg2#
如果您需要在tabview之前使用Login/SignUp View,请不要使用NavigationView Package 它。在登录/注册视图中
在子视图中,您可以使用
@EnvironmentObject
控制 isSignedIn 变量,并在Signed Out时更改该值。这可能是其中一个选项卡视图:
v9tzhpje3#
在iOS 13中也是如此:
7kjnsjlb4#
如果您想要动态导航标题,您可以这样做
另外,如果您收到这样的警告尝试弹出到丢失的目的地- SwiftUI/NavigationBridge_PhoneTV.swift:213您可能可以关注此博客https://computerlounge.it/swifui-trying-to-pop-to-missing-destination/