Swift 导航到视图时刷新视图
在SwiftUI 2中,当我从父视图导航到子视图,然后再返回父视图时,父视图不会刷新其内容。如何强制它刷新其内容 为了测试内容是否被刷新,在我的父视图中,我使用以下代码显示了一个随机数:Swift 导航到视图时刷新视图,swift,swiftui,Swift,Swiftui,在SwiftUI 2中,当我从父视图导航到子视图,然后再返回父视图时,父视图不会刷新其内容。如何强制它刷新其内容 为了测试内容是否被刷新,在我的父视图中,我使用以下代码显示了一个随机数: Text("Random number is \(Int.random(in: 1..<100))") Text(“Random number is\(Int.Random)(in:1..SwiftUI是声明性的-正如您定义视图可能处于的状态一样,Swift UI将负责更新视图的时间
Text("Random number is \(Int.random(in: 1..<100))")
Text(“Random number is\(Int.Random)(in:1..SwiftUI是声明性的-正如您定义视图可能处于的状态一样,Swift UI将负责更新视图的时间。在您的示例中,状态没有变化,因此视图不会更新
如果要刷新视图,则需要更新“出现”事件的状态。可以这样做:
struct ContentView: View {
@State var intValue: Int = 0
var body: some View {
Text("Random number is \(self.intValue)")
.onAppear {
intValue = Int.random(in: 1..<100)
}
}
}
struct ContentView:View{
@状态变量intValue:Int=0
var body:一些观点{
文本(“随机数为\(self.intValue)”)
奥纳佩尔先生{
intValue=Int.random(in:1..您可以通过向源视图添加带有@State变量的.id(viewID)视图修饰符(在本例中称为“viewID”)来强制SwiftUI更新列表。然后在目标视图的.onDisappear()中更新此viewID:
struct ContentView: View {
@State private var viewID: Int = 0
var body: some View {
NavigationView {
VStack {
Text("Hello, random world number \(Int.random(in: 1...100))")
.padding()
.id(viewID)
NavigationLink(
destination: destinationView,
label: { labelView })
}
}
}
private var labelView: some View {
Text("Go to Destination View")
}
private var destinationView: some View {
return Text("I am the Destination.")
.onDisappear{
viewID += 1
}
}
}
你的建议显然会起作用,因为状态更改会触发刷新。但是,有没有什么方法可以在不更改状态的情况下触发刷新?(我实际上并没有在我的应用程序中使用随机数,我只是用它来证明我的视图不会刷新)。在内部,每次状态更改时,Swift都必须调用某些刷新函数;您知道是否可以直接调用此函数吗?@Gary您应该将刷新留给SwiftUI。当没有任何更改时,您不需要强制刷新视图,如果某些内容确实更改,则@state
将负责刷新埃弗林。