iOS16中SwiftUI如何禁用NavigationLink动画?仅针对部分链接/视图
可以实现仅针对特定链接或视图禁用转场动画,无需全局修改,以下是几种实用方法:
方法1:直接给目标NavigationLink添加事务修饰符
通过.transaction修饰符覆盖当前链接的动画配置,仅对该链接生效:
NavigationLink("无动画跳转") { TargetView() } .transaction { transaction in transaction.animation = nil }
此方式会取消该NavigationLink触发时的所有转场动画,其他未添加该修饰符的链接不受影响。
方法2:封装自定义无动画NavigationLink
如果需要多次使用无动画链接,可封装成自定义View简化代码:
struct NoAnimationNavigationLink<Label: View, Destination: View>: View { let destination: Destination let label: Label init(destination: Destination, @ViewBuilder label: () -> Label) { self.destination = destination self.label = label() } var body: some View { NavigationLink(destination: destination) { label } .transaction { $0.animation = nil } } } // 使用示例 NoAnimationNavigationLink(destination: TargetView()) { Text("自定义无动画链接") }
方法3:编程式导航时禁用动画
如果使用NavigationPath进行编程式导航,可在修改路径时指定无动画:
@State private var path = NavigationPath() Button("编程式无动画跳转") { withAnimation(nil) { path.append("TargetPage") } } .navigationDestination(for: String.self) { value in if value == "TargetPage" { TargetView() } }
内容的提问来源于stack exchange,提问作者breq
相关产品推荐
相关产品推荐

