我在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):
这是预期的行为吗?
编辑:
一个简单的示例演示您不需要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
谢谢!
答案 0 :(得分:2)
在@Binding
中将name
用于MasterView
:
@Binding var name : String
然后像这样传递name
:
NavigationLink(destination: MasterView(name: $name)) {
...
}
现在,当您更改state
(名称)时,将通知其他视图(使用该状态的Binding
)。
答案 1 :(得分:0)
我很确定这是 SwiftUI 中 List
的一个错误。如果您将代码中的 List
替换为 VStack
,它应该可以正常工作。我还没有想出一个解决方法。如果您在提交错误报告时收到 Apple 的回复,请告诉我。