给出以下简单的NavigationView
:
struct ContentView : View {
var body: some View {
NavigationView {
VStack {
NavigationLink("Push Me", destination: Text("PUSHED VIEW"))
}
}
}
}
有人将目的地视图从堆栈中推入/弹出到堆栈中时,是否有人发现禁用NavigationView
动画的方法?
自iOS2.0起,这在UIKit中成为可能!我认为从框架中提出的要求不是太多。我在所有视图(即NavigationView
容器,目标视图,NavigationLink
等)上尝试了各种修饰符
这些是我尝试过的一些修改器:
.animation(nil)
.transition(.identity)
.transaction { t in t.disablesAnimations = true }
.transaction { t in t.animation = nil }
没有任何改变。我也没有在EnvironmentValues
中找到任何有用的东西:-(
我遗漏了一些非常明显的东西,还是功能还不存在?
答案 0 :(得分:2)
我最近创建了一个名为swiftui-navigation-stack
(https://github.com/biobeats/swiftui-navigation-stack)的开源项目,其中包含NavigationStackView
,该视图模仿了标准NavigationView
的导航行为,并添加了一些有用的信息。特征。例如,您可以使用NavigationStackView
并按照Kontiki在问题中的要求禁用过渡动画。创建NavigationStackView
时,只需将.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()
}
}
结果是:
如果你们能和我一起改善这个开源项目,那就太好了。
答案 1 :(得分:1)
Xcode 11.3:
现在没有修改器可以禁用NavigationView
动画。
您可以使用结构init()
禁用动画,如下所示:
struct ContentView : View {
init(){
UINavigationBar.setAnimationsEnabled(false)
}
var body: some View {
NavigationView {
VStack {
NavigationLink("Push Me", destination: Text("PUSHED VIEW"))
}
}
}
}