我无法在 SwiftUI 中将 NavigationItemTitle 覆盖到 TabView

如何解决我无法在 SwiftUI 中将 NavigationItemTitle 覆盖到 TabView

我是 SwiftUI 的新手。我有一个 ContentView,因为我添加了 NavigationView,它从那个 NavigationView 重定向到另一个具有 TabView 的视图。

//ContentView.swift

struct ContentView: View {

  @State private var isValidLogin : Bool = false    

  var body: some View {
    NavigationView{
         vstack
         {
           NavigationLink(destination: HomePage(),isActive:$isValidLogin) {
                Text("LOGIN")
                    .font(.headline)
                    .foregroundColor(.white)
                    .padding()
                    .onTapGesture {
                         self.isValidLogin = true
                    }
          }
        }.padding()
      }
   }
} 

此处为 HomePage.swift 的代码

import SwiftUI

struct HomePage: View {

private enum Tab: Hashable {
    case home
    case map
}
@State private var selectedTabbar : Tab = .home

var body: some View {
    TabView(selection: $selectedTabbar)
    {
        HomeView()
            .tag(0)
            .tabItem{
                Text("Home")
                Image(systemName: "house.fill")
            }
        
        MapView()
            .tag(1)
            .tabItem {
                Text("Map")
                Image(systemName: "map")
            }
    }.navigationBarTitle("Settings")
 }
}

struct HomePage_Previews: PreviewProvider {
    static var previews: some View {
        HomePage()
    }
}

这里是 MapView.swift 的代码

import SwiftUI

struct MapView: View {

var body: some View {
    Text("You are in Map Page")
        .navigationBarTitle(Text("Map"),displayMode: .inline)
 }
} 
struct MapView_Previews: PreviewProvider {
    static var previews: some View {
        MapView()
    }
}

我的错误是:当我为 TabView 属性设置全局标题时,.navigationBarTitle("Settings") 总是在反映。但是我想要这样,如果我将 NavigationTitle 设置为子视图,那么它将显示在该子视图中。我需要这样,当我们点击 Map Item 时,NavigationTitle 应该 Map。当我们将导航标题应用于孩子时,我无法找到为什么它不起作用的错误

任何帮助都应该受到赞赏。提前致谢。

解决方法

我找到了解决方案。

这里我更改了我的 HomePage

struct HomePage: View {
    @State private var selectedTabbar = 0
    
    var body: some View {
        TabView(selection: $selectedTabbar)
        {
            HomeView()
                .tag(0)
                .tabItem{
                    Text("Home")
                    Image(systemName: "house.fill")
                }
            MapView()
                .tag(1)
                .tabItem {
                    Text("Map")
                    Image(systemName: "map")
                }  Image(systemName: "gear")
                }
        }.navigationBarTitle(Text(navigationBarTitle))
        .navigationBarBackButtonHidden(true)
        .accentColor(.red)
    }
}

我为 HomePage 添加了一个扩展名。它正在设置子视图的导航标题:

private extension HomePage {
    var navigationBarTitle: String {
        selectedTabbar ==  0 ? "Home" : "Map"
    }
}

使用此扩展程序,我们可以将动态导航标题设置为 TabView

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?