SwiftUI NavigationView 子视图跳转与返回过渡动画异常问题
问题原因
你的导航过渡异常是因为子视图中未指定触发条件的.animation修饰符,会将导航栈切换的属性变化也纳入动画范围,和你自定义的横向滚动偏移动画冲突,导致跳转、返回时出现视图错位、重叠的问题。同时外层GeometryReader缺少明确尺寸约束,导航过渡时尺寸计算延迟会引发子视图快速飞入的异常效果。
具体修复步骤
- 限定动画触发条件
将子视图中HStack末尾的.animation(.easeInOut)替换为绑定指定值的版本,仅在滚动相关的变量变化时才触发动画:
// 替换原有.animation(.easeInOut) .animation(.easeInOut, value: applicationSettings.currentBudgetMonth) .animation(.easeInOut, value: dragOffset)
- 补全GeometryReader尺寸约束
给外层GeometryReader添加全屏约束,避免过渡过程中尺寸计算异常:
GeometryReader { outterView in // 原有内部代码不变 } // 新增以下修饰符 .frame(maxWidth: .infinity, maxHeight: .infinity)
- 可选适配
如果修改后仍有轻微过渡异常,可以给子视图的根视图添加显式过渡效果,和系统导航默认动画对齐:
// 加在BudgetPagesView的根视图修饰符列表中即可 .transition(.move(edge: .trailing))
内容的提问来源于stack exchange,提问作者rpetruzz
相关产品推荐
相关产品推荐

