SwiftUI - 当我在 macOS 上更改选项卡时,为什么 TabView 及其内容有时不刷新?

chu*_*mcl 10 ios tabview swift swiftui

我正在尝试使用 SwiftUI 在 macOS 上制作一个选项卡式应用程序,但我在TabView.

当我有两个选项卡与TextField每个S和挽救他们的文本状态,各自的私有变量,一个奇怪的现象发生了:当我从切换标签一片乙文本输入到后项卡ATextField,标签指标显示,我还是上选项卡 A,但内容显示选项卡 B的内容。当我再次单击选项卡 B的按钮时,它仍会显示选项卡 B的内容。此外,当我之后按下选项卡 A的按钮时,它会显示选项卡 A的内容,但选项卡的指示器仍然显示我在选项卡 B 上

我可能做错了什么?

这是一个说明我的问题的示例:

import SwiftUI

struct ContentView: View {
    var body: some View {
        TabView
            {
                TabAView()
                    .tabItem({Text("Tab A")})
                TabBView()
                    .tabItem({Text("Tab B")})
        }
    }
}

struct TabAView: View {
    @State private var text = ""
    var body: some View {
        VStack{
            Text("Tab A")
            TextField("Enter", text: $text)
        }
    }
}

struct TabBView : View {
    @State private var text = ""
    var body: some View {
        VStack {
            Text("Tab B")
            TextField("Enter", text: $text)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是发生问题的屏幕截图: 这是发生问题的GIF

Atr*_*ath 4

这绝对是 SwiftUI 实现 TabView 时的一个 bug。但是您可以通过绑定到 TabView 选择并手动设置当前选项卡来轻松解决该问题,如下所示:

struct ContentView: View {
    @State private var currentTab = 0
    var body: some View {
        TabView(selection: $currentTab)
            {
                TabAView()
                    .tabItem({Text("Tab A")})
                    .tag(0)
                    .onAppear() {
                        self.currentTab = 0
                    }
                TabBView()
                    .tabItem({Text("Tab B")})
                    .tag(1)
                    .onAppear() {
                        self.currentTab = 1
                    }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此错误似乎仅在用户在 TextField 具有焦点时更改选项卡时才会显现出来。

如果您对代码进行上述更改,它将按预期工作。

修复工作的屏幕截图