我有一个关于 SwiftUI 屏幕过渡"Back"的问题


"A> B> A> B> A ..."

当重复从screen A切换到screen B并再次返回到screen A的操作时,我们相信,如果使用以下代码,负载将继续累积,因为旧的屏幕信息被保留。

但是,"NavigationLink"中包含的返回代码不会重新加载上一个屏幕,因此当前使用以下代码:

问题:

如果我想在回忆旧屏幕时总是重新加载屏幕,该怎么办?

struct ContentView: View {
@State private var Flag : Bool = false
var body: some View {
NavigationView {
VStack{
Spacer()
Button(action: {self.Flag.toggle()}){
Text("OpenA")
NavigationLink(destination: A(),isActive: $Flag) {
EmptyView()
}
}
Spacer()
}.navigationBarTitle("").navigationBarHidden(true)
}.navigationBarBackButtonHidden(true).navigationViewStyle(StackNavigationViewStyle())
}
}

struct A: View {
@State private var Flag : Bool = false
var body: some View {
VStack{
Group{
Spacer()
Button(action: {self.Flag.toggle()}){
Text("A > B")
}
NavigationLink(destination: B(),isActive: $Flag) {
EmptyView()
}
Spacer()
}.navigationBarTitle("").navigationBarHidden(true).navigationBarBackButtonHidden(true)
}.navigationBarBackButtonHidden(true).navigationViewStyle(StackNavigationViewStyle())
}
}
struct B: View {
@State private var Flag : Bool = false
var body: some View {
VStack{
Group{
Spacer()
Button(action: {self.Flag.toggle()}){
Text("B > A")
}
NavigationLink(destination: A(),isActive: $Flag) {
EmptyView()
}
Spacer()
}.navigationBarTitle("").navigationBarHidden(true).navigationBarBackButtonHidden(true)
}.navigationBarBackButtonHidden(true).navigationViewStyle(StackNavigationViewStyle())
}
}
  1. 包含在"NavigationLink"中的返回代码

NavigationLink是结构体,因此除了NavigationLink本身之外,不存在类似于返回值的内容

在另一个站点

NavigationLink(destination: A(),isActive: $Flag) {
EmptyView()
}

其构造函数的一个参数绑定到布尔值

@State private var Flag : Bool = false

如果用户单击导航链接,此值将更改为true,一旦用户取消链接的视图,它将再次更改为false。这意味着,ContentView被告知,并且ContentView必须重新计算其主体属性(换句话说,如果其主体中有不同的东西,则值将反映这一点。

我看那里什么都没变!你期待什么?

最新更新