You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI过渡动画仅在使用废弃API时正常,如何合规实现?

SwiftUI 过渡动画废弃API替代方案

你的问题核心是替换被废弃的全局.animation(.linear),同时保证过渡动画正常触发。以下是两种符合iOS15+规范的解决方案:

方案一:显式在状态变更时指定动画

直接在withAnimation中传入线性动画类型,移除全局的废弃API调用即可。状态切换时会明确触发线性过渡动画,子视图的显示、隐藏动画都能正常工作。

修改后的完整代码:

struct ShowAnimationProblemView: View {
    @State var showingSubView = false
    
    var body: some View {
        VStack {
            Text("Animation Transition Problem").padding()
            Button("Show subView") {
                withAnimation(.linear) {
                    showingSubView.toggle()
                }
            }.padding()
            if showingSubView {
                VStack {
                    Text("This is")
                    Text("the")
                    Text("subView")
                }
                .padding(50)
                .border(.red)
                .transition(.slide)
            }
            Spacer()
        }
    }
}

方案二:使用绑定状态的动画API

保留原有的withAnimation(无需指定动画类型也可),将全局的.animation(.linear)替换为.animation(.linear, value: showingSubView)。这个API会在指定的状态值(showingSubView)发生变化时,自动给关联视图应用线性动画,包括过渡效果。

修改后的完整代码:

struct ShowAnimationProblemView: View {
    @State var showingSubView = false
    
    var body: some View {
        VStack {
            Text("Animation Transition Problem").padding()
            Button("Show subView") {
                withAnimation {
                    showingSubView.toggle()
                }
            }.padding()
            if showingSubView {
                VStack {
                    Text("This is")
                    Text("the")
                    Text("subView")
                }
                .padding(50)
                .border(.red)
                .transition(.slide)
            }
            Spacer()
        }
        .animation(.linear, value: showingSubView)
    }
}

两种方案都能消除废弃警告,同时保证子视图滑入、滑出的动画正常触发。

内容的提问来源于stack exchange,提问作者Falco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:15:57