如何解决TabView Swift UI 中的 NavigationView
经过长时间的休息,我刚刚开始使用 SwiftUI,但我不明白为什么我不能将 Navigation View
放在 Tab View
中。
我希望我的 Navigation View
成为 .tabItem
,这样视图就会作为主应用导航的一部分出现,所以我正在尝试:
struct ContentView: View {
var body: some View {
TabView {
NavigationView {
.tabItem {
Text("Home")
}
Text("Tab bar test")
.navigationBarTitle("Page One")
}
}
这不适用于错误消息
Cannot infer contextual base in reference to member 'tabItem'
但是当我尝试这个
var body: some View {
TabView {
NavigationView {
Text("Tab bar test")
.navigationBarTitle("Page One")
}
}
.tabItem {
Image(systemName: "1.circle")
Text("Home")
}
}
它构建良好,但标签栏不显示。
我希望对其他人有用的主要问题是......
为什么我不能通过将 Navigation View
直接嵌套在 .tabItem
中来使 Navigation View
成为标签栏项目(按照我的第一个示例)?
我认为这是与 this one 类似的问题,但那里没有代码。然后与 this one 非常相似,但他们似乎将 .tabItem
直接与 ContentView
一起使用,就像我想与 NavigationView
一起使用,但这不是构建!?
我可能误解了一些简单的事情,但目前我完全不明白。
解决方法
.tabItem
应用作表示该选项卡的视图的修饰符。
在第一个示例中,由于语法错误,这不起作用 - 您试图在 NavigationView {
中的闭包的打开时使用它,而您希望它在外部右大括号:NavigationView { }.tabItem(...)
在第二个示例中,您使用 .tabItem
作为整个 TabView
的修饰符,而不是 NavigationView
。
如果您缩进代码以便您可以看到层次结构,那么您的两个示例可能都更清楚地揭示了正在发生的事情。尝试在 Xcode 中选择您的代码并使用 Ctrl-I 让 Xcode 为您正确格式化它。
这是一个工作版本:
struct ContentView : View {
var body: some View {
TabView {
NavigationView {
Text("Tab bar test")
.navigationBarTitle("Page One")
}
.tabItem { //note how this is modifying `NavigationView`
Image(systemName: "1.circle")
Text("Home")
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。