SwiftUI-TabView初始tabItem不显示文本

时间:2020-06-24 10:35:14

标签: ios swift xcode swiftui

问题摘要

我有HomeView,其中包含TabView(位于NavigationView中,请参见下面的代码)。如果要从另一个视图(LoginView)加载HomeView,它将按预期加载,并且一切正常。如果我尝试像这样直接加载HomeView(代码在我的ContentView中):

if authService.isLoggedIn {
    HomeView()
} else {
    LoginView()
}

它再次加载带有底部标签的HomeView,但是我的第一个标签缺少文本,仅显示其图像。奇怪的是,如果我切换到标签页(即点击“帐户”),则第一个标签页上的文字会再次出现。

这是我的TabView的代码:

NavigationView {
        TabView(selection: $selected) {
            PlayView()
                .tabItem {
                    Image(systemName: "play.circle.fill")
                        .font(.system(size: 24))
                    Text("Play")
            }
            .navigationBarHidden(true)
            .navigationBarTitle("")
            .tag(1)
            
            AccountView()
                .tabItem {
                    Image(systemName: "person.circle.fill")
                        .font(.system(size: 24))
                    Text("Account")
            }
            .tag(3)
            
            NotificationsView()
                .tabItem {
                    Image(systemName: "bell.fill")
                        .font(.system(size: 24))
                    Text("Notifications")
            }
            .tag(4)
        }
        .accentColor(Color(K.Colors.Secondary))
        .navigationBarTitle("")
        .navigationBarHidden(true)
}

预期结果

Expected Result

实际结果

Actual Result

注意:请注意图标的显示方式比其他图标要低,因此文本实际上根本不显示

到目前为止我尝试过的事情

我只尝试了几件事,因为TabView在苹果的官方文档中没有很好地记录。

  • 我尝试将NavigationView上下移动视图层次结构
  • 设置另一个选项卡进行初始选择
  • 在.tabItem部分内切换Image()和Text()的位置
  • 通过互联网搜索类似的问题

1 个答案:

答案 0 :(得分:3)

我找到了解决方案!原来底部显示的是导航栏标题,我将其设置为空字符串。因此,我在TabView元素的每个View上更改了导航栏标题。现在的代码如下所示:

NavigationView {
    TabView(selection: $selected) {
        PlayView()
            .tabItem {
                Image(systemName: "play.circle.fill")
                    .font(.system(size: 24))
                Text("Play")
        }
        .navigationBarHidden(true)
        .navigationBarTitle("Play")
        .tag(1)
        
        AccountView()
            .tabItem {
                Image(systemName: "person.circle.fill")
                    .font(.system(size: 24))
                Text("Account")
        }
        .navigationBarHidden(true)
        .navigationBarTitle("Account")
        .tag(3)
        
        NotificationsView()
            .tabItem {
                Image(systemName: "bell.fill")
                    .font(.system(size: 24))
                Text("Notifications")
        }
        .navigationBarHidden(true)
        .navigationBarTitle("Notifications")
        .tag(4)
    }
    .accentColor(Color(K.Colors.Secondary))
    .navigationBarTitle("")
    .navigationBarHidden(true)
}

并且可以按预期工作。