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

iOS 17下页面跳转时SwiftUI圆形动画消失问题求助

问题解决:登录页面圆形动画跳转后消失

问题根源

你的圆形动画视图挂载在NavigationStack的外层overlay上,当通过navigationDestination跳转到注册页面时,注册页面会占据整个导航栈的内容区域,要么遮挡住外层圆形视图,要么因视图层级切换导致动画中断后视图被移除。

修复方案

将圆形视图移到NavigationStack内部,作为所有页面的共享背景元素,确保跳转后视图不消失,同时优化动画连贯性:

修改后的核心代码

struct JoinPage: View{
    @State private var showSignup: Bool = false
    var body: some View {
        NavigationStack {
            // 用ZStack将圆形视图作为LoginPage的背景
            ZStack {
                CircleView()
                    .animation(.smooth(duration: 0.45, extraBounce: 0), value: showSignup)
                
                LoginPage(showSignup: $showSignup)
            }
            .navigationDestination(isPresented: $showSignup) {
                // 注册页面同样保留圆形背景
                ZStack {
                    CircleView()
                        .animation(.smooth(duration: 0.45, extraBounce: 0), value: showSignup)
                    
                    SignupPage() // 替换为你的注册页面
                }
            }
        }
    }
    
    @ViewBuilder
    func CircleView() -> some View{
        Circle()
            .fill(.linearGradient(colors: [Color.green, .blue, .green], startPoint: .top, endPoint: .bottom))
            .frame(width: 200, height:200)
            .offset(x: showSignup ? 90 : -90, y:-90)
            .blur(radius: 15)
            .hSpacing(showSignup ? .trailing : .leading)
            .vSpacing(.top)
            .allowsHitTesting(false) // 避免拦截页面交互
    }
}

额外优化

在登录页面的注册按钮中,用withAnimation包裹状态切换,让动画与导航跳转同步:

Button("Sign Up"){
    withAnimation(.smooth(duration: 0.45, extraBounce: 0)) {
        showSignup.toggle()
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:07:51