1

我的问题是 TabView 没有更新。

我想登录,然后在同一个TabItem.

只有在我杀死应用程序并重新打开它之后才会TabView出现。ProfileScreen

这是TabView代码:

import SwiftUI

struct ContentView: View {
    
    @State var userToken: String = UserDefaults.standard.string(forKey: "UserToken") ?? ""
    var body: some View {
        TabView{
            HomeScreen(text: .constant("")).tabItem({ Image(systemName: "house") }).tag(0)
            Text("Cart").tabItem({ Image(systemName: "cart") }).tag(1)
            if userToken.isEmpty {
                LoginScreen().tabItem({ Image(systemName: "person") }).tag(2)
            } 
            else { 
                ProfileScreen().tabItem({ Image(systemName: "person") }).tag(2)
            }
        }
    }
    
}

我尝试过的事情:

  • 将不同的@State 值传递给两个屏幕
  • 在 LoginScreen 中呈现配置文件屏幕,但它呈现在 TabView 的顶部
4

2 回答 2

2

如果您使用的是最新的 SwiftUI,请考虑使用 @AppStorage 而不是 @State:

@AppStorage("UserToken") var userToken: String = ""
于 2020-08-24T17:59:02.707 回答
0

如果您在任何其他视图中修改 userToken 的值,例如可能是 LoginView,您需要一种机制来通知内容视图有关该更新。

您可以考虑在此处使用 LocalNotifications 将更新发送到 ContentView,以便在状态更新时重新加载视图。

于 2020-08-25T14:20:32.493 回答