macOS中为NavigationStack添加转场动画的实现方法
方案1:绑定NavigationPath的全局动画
直接给NavigationStack添加animation修饰符,将动画触发绑定到NavigationPath的变化上,所有通过NavigationLink(value:label:)触发的视图切换都会自动应用动画:
struct ContentView: View { @State private var navigationPath = NavigationPath() var body: some View { NavigationStack(path: $navigationPath) { NavigationLink(value: "Detail") { Text("进入详情页") } .navigationDestination(for: String.self) { _ in DetailView(path: $navigationPath) } } .animation(.easeInOut, value: navigationPath) // 绑定路径变化触发动画 } } struct DetailView: View { @Binding var path: NavigationPath var body: some View { Button("返回") { path.removeLast() } } }
方案2:为特定视图设置自定义转场
如果需要给某个跳转单独配置动画效果,可以在navigationDestination的目标视图上添加transition修饰符,配合全局动画生效:
.navigationDestination(for: String.self) { _ in DetailView(path: $navigationPath) .transition(.slide) // 自定义转场,比如slide、scale、opacity等 }
注意事项
- macOS的
NavigationStack默认可能未启用动画,通过绑定NavigationPath的动画修饰符是最可靠的触发方式。 - 无需用
withAnimation包裹NavigationLink的点击逻辑,SwiftUI会通过路径变化自动关联动画。
内容的提问来源于stack exchange,提问作者Damian Dudycz
相关产品推荐
相关产品推荐

