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
在 SwiftUI 中构建一个自定义的类 TabView 视图