【发布时间】:2020-04-03 20:56:05
【问题描述】:
在 SwiftUI 中有没有办法改变 NavigationView/NavigationLink 的标准行为,即从一个视图滑动到下一个视图?我想要一个自定义动画/过渡,例如淡入/淡出。
我现在正在尝试一段时间并解决了其中的一半,但下半部分却在苦苦挣扎。这段代码:
struct ContentView: View {
@State var appeared: Double = 0.0
var body: some View {
NavigationView {
VStack {
Text("\(appeared)")
NavigationLink(destination: ViewB()) {Text("go to View B")}
}
.opacity(appeared)
.animation(Animation.easeInOut(duration: 3.0), value: appeared)
.onAppear {self.appeared = 1.0}
.onDisappear {self.appeared = 0.0}
}
}
}
当视图出现时工作正常。它通过在 3 秒内将不透明度更改为 1.0 来淡入。都好。但是当点击NavigationLink,转到视图B时,它会滑开这个视图,视图B(具有相同的逻辑)会慢慢淡入。我猜这是因为onDisappear 实际上是在视图消失时触发的,而不是在视图即将移开时触发。
是否有机会告诉 SwiftUI 不要滑动或滑动,而是执行自定义动画/过渡?
我使用的是 Xcode 11.2.1
【问题讨论】:
-
目前还没有官方自定义标准
NavigationView动画的方法,但是可以创建自定义导航。您可能会发现我在此 post 中提供的方法很有帮助。那里有要求的幻灯片动画,但实际上它可以与任何一个重新打包。 -
嗨@Asperi,您链接帖子中的方法是我用作解决方法的方法。我创建了自己的 NavigationView - 非常接近您在那里提供的方式。
标签: swiftui swiftui-navigationlink