Swiftui 如何禁用NavigationView推送和弹出动画

Swiftui 如何禁用NavigationView推送和弹出动画,swiftui,swiftui-navigationlink,swiftui-navigationview,Swiftui,Swiftui Navigationlink,Swiftui Navigationview,鉴于此简单的导航视图: struct ContentView:View{ var body:一些观点{ 导航视图{ VStack{ 导航链接(“推送我”,目的地:文本(“推送视图”)) } } } } 当目标视图被推入/弹出堆栈时,是否有人找到了禁用NavigationView动画的方法 这在iOS2.0之后的UIKit中就可以实现了!我认为对框架的要求并不过分。我在所有视图(即NavigationView容器、目标视图、NavigationLink等)上尝试了各种修改器 以下是我尝试过的一些

鉴于此简单的
导航视图

struct ContentView:View{
var body:一些观点{
导航视图{
VStack{
导航链接(“推送我”,目的地:文本(“推送视图”))
}
}
}
}
当目标视图被推入/弹出堆栈时,是否有人找到了禁用
NavigationView
动画的方法

这在iOS2.0之后的UIKit中就可以实现了!我认为对框架的要求并不过分。我在所有视图(即
NavigationView
容器、目标视图、
NavigationLink
等)上尝试了各种修改器

以下是我尝试过的一些修改器:

.animation(无)
.transition(.identity)
.transaction{t in t.disablesAnimations=true}
.transaction{t in t.animation=nil}
没有什么不同。我在
EnvironmentValues
中也没有发现任何有用的内容:-(


我是缺少了一些非常明显的东西,还是功能还没有实现?

Xcode 11.3:

现在没有任何修改器可以禁用
NavigationView
动画

您可以使用struct
init()
禁用动画,如下所示:

struct ContentView : View {

    init(){
        UINavigationBar.setAnimationsEnabled(false)
    }

    var body: some View {
        NavigationView {
            VStack {
                NavigationLink("Push Me", destination: Text("PUSHED VIEW"))
            }
        }
    }
}

我最近创建了一个名为
swiftui导航堆栈
()其中包含
NavigationStackView
,该视图模仿标准
NavigationView
的导航行为,添加了一些有用的功能。例如,您可以使用
NavigationStackView
并根据Kontiki在问题中的请求禁用过渡动画。当您创建
导航时nStackView
只需将
.none
指定为
transitionType

struct ContentView : View {
    var body: some View {
        NavigationStackView(transitionType: .none) {
            ZStack {
                Color.yellow.edgesIgnoringSafeArea(.all)

                PushView(destination: View2()) {
                    Text("PUSH")
                }
            }
        }
    }
}

struct View2: View {
    var body: some View {
        ZStack {
            Color.green.edgesIgnoringSafeArea(.all)
            PopView {
                Text("POP")
            }
        }
    }
}
PushView
PopView
是两个视图,允许您推送和弹出视图(类似于SwiftUI
NavigationLink
)。以下是完整的示例:

import SwiftUI
import NavigationStack

struct ContentView : View {
    var body: some View {
        NavigationStackView(transitionType: .none) {
            ZStack {
                Color.yellow.edgesIgnoringSafeArea(.all)

                PushView(destination: View2()) {
                    Text("PUSH")
                }
            }
        }
    }
}

struct View2: View {
    var body: some View {
        ZStack {
            Color.green.edgesIgnoringSafeArea(.all)
            PopView {
                Text("POP")
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
结果是:

如果你们能和我一起改进这个开源项目,那就太好了