SwiftUI TabView 不更新视图

Posted

技术标签:

【中文标题】SwiftUI TabView 不更新视图【英文标题】:SwiftUI TabView not updating View 【发布时间】:2020-08-24 16:28:38 【问题描述】:

我的问题是 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 的顶部

【问题讨论】:

你在哪里修改“用户令牌”属性? 【参考方案1】:

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

@AppStorage("UserToken") var userToken: String = ""

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于SwiftUI TabView 不更新视图的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI Picker 视图在 TabView 中消失

SwiftUI 没有使用 List 和 TabView 正确处理 @State

带有 TabView、SwiftUI 的水平分页滚动视图

在 SwiftUI 中构建一个自定义的类 TabView 视图

SwiftUI:我可以向 TabView 添加更多视图,然后是选项卡项吗?

SwiftUI 在 NavigationLink 视图中隐藏 TabView 栏