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
相关产品推荐
相关产品推荐

