变量更改时NavigationLink的目标视图不会更新

时间:2020-07-07 16:44:36

标签: swift swiftui

我在SwiftUI中遇到了奇怪的行为,我不确定这是一个错误(我正在运行Big Sur和XCode 12 beta)还是我做错了。

当我将变量传递到const newTableState = JSON.parse(JSON.stringify(tableState)); 的目标视图时,当变量更改时,该目标视图不会重新呈现。我已将这种行为显示给您。这是一个完全正常的示例(仅适用于新的SwiftUI版本和iOS 14):

NavigationLink

这是演示行为的简短gif文件(抱歉,分辨率较差,这是一个分辨率更高的视频:https://www.youtube.com/watch?v=aTCex86tkYQ):

enter image description here

这是预期的行为吗?

编辑:

一个简单的示例演示您不需要import SwiftUI struct ContentView: View { @State var name: String var body: some View { NavigationView { List { NavigationLink(destination: MasterView(name: name)) { Text("Show Name In Big") } Rectangle() .frame(height: 1) Text("Current Name: \(name)") .font(.headline) .foregroundColor(.accentColor) Button(action: { name = "Doug" }, label: { Text("Change Name") .bold() }) } .listStyle(SidebarListStyle()) Text("Master") Text("Detail") } } } struct MasterView: View { let name: String var body: some View { Text(name) .font(.title) } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView(name: "Bob") } } 即可在值更改时重新呈现视图:

Binding

谢谢!

2 个答案:

答案 0 :(得分:2)

@Binding中将name用于MasterView

@Binding var name : String

然后像这样传递name

NavigationLink(destination: MasterView(name: $name)) {
...
}

现在,当您更改state(名称)时,将通知其他视图(使用该状态的Binding)。

答案 1 :(得分:0)

我很确定这是 SwiftUI 中 List 的一个错误。如果您将代码中的 List 替换为 VStack,它应该可以正常工作。我还没有想出一个解决方法。如果您在提交错误报告时收到 Apple 的回复,请告诉我。