SwiftUI的Programmatic NavigationLink push入栈无默认动画如何解决
问题描述
使用SwiftUI的Programmatic NavigationLink实现push入栈跳转时,未触发系统默认的转场动画,需要恢复默认动画效果,参考实现代码如下:
struct ContentView: View { @State private var isShowingDetailView = false var body: some View { NavigationView { VStack { NavigationLink(destination: Text("Second View"), isActive: $isShowingDetailView) { EmptyView() } Button("Tap to show detail") { isShowingDetailView = true } } .navigationTitle("Navigation") } } }
问题原因
动画失效是因为业务代码中将NavigationLink放在了isShowingDetailView的条件判断分支中,导致视图渲染逻辑不符合系统转场动画的触发要求。
错误写法参考:
if isShowingDetailView { //remove if else NavigationLink(destination: Text("Second View"), isActive: $isShowingDetailView) { EmptyView() } }
解决方案
将NavigationLink从isShowingDetailView的条件判断中移除,保证NavigationLink在视图层级中始终存在,即可恢复系统默认的push转场动画。
内容的提问来源于stack exchange,提问作者TuracBey
相关产品推荐
相关产品推荐

