ios - 过渡不适用于 SwiftUI 中的路由器

标签 ios swift iphone swiftui

我正在制作一个基于 SwiftUI 的应用程序。

我在主层次结构中嵌入了一个路由器来管理应用程序导航。一开始这工作得很好,但后来我添加了第二级路由器,并且转换被破坏并停止工作。

实际上,两个路由器中的导航都运行良好,但无法使其与转换一起使用。

应用程序根目录转到此文件:

var body: some View {
    VStack {
        if authRouter.isFirstLaunch {
            AuthView()
        } else if sessionState.launchListeningCompleted || sessionState.user != nil || sessionState.error != nil {
            Home()
        } else {
            ZStack {
                Image("Icon")
                VStack {
                    Spacer()
                    ActivityIndicatorUI(animating: .constant(true), style: .medium)
                        .padding(.bottom)
                    Image("Launcher")
                        .padding(.bottom, 95.0)
                        .padding(.top)
                }
            }
        }
    }.onAppear(perform: isFirstLaunch)
}

本质上,如果是第一次启动应用程序,它将转到 AuthView 文件,该文件是一个像这样的路由器:

struct AuthView: View {

@EnvironmentObject var authRouter: AuthRouter

var body: some View {
    VStack {
        if authRouter.viewName == AuthViews.Onboarding {
            Onboarding()
        } else if authRouter.viewName == AuthViews.SignIn {
            SignIn()
                .transition(.scale)
        } else if authRouter.viewName == AuthViews.SignUp {
            SignUp()
                .transition(.move(edge: .trailing))
        } else if authRouter.viewName == AuthViews.ForgotPassword {
            ForgotPassword()
                .transition(.move(edge: .trailing))
        }
    }
}

}

这些转换不起作用。一开始,这是我添加的第一个路由器并且它正在工作。然后在第二层它停止工作。

感谢您的帮助!

最佳答案

向父容器添加动画

var body: some View {
    VStack {
        if authRouter.viewName == AuthViews.Onboarding {
            Onboarding()
        } else if authRouter.viewName == AuthViews.SignIn {
            SignIn()
                .transition(.scale)
        } else if authRouter.viewName == AuthViews.SignUp {
            SignUp()
                .transition(.move(edge: .trailing))
        } else if authRouter.viewName == AuthViews.ForgotPassword {
            ForgotPassword()
                .transition(.move(edge: .trailing))
        }
    }.animation(.default)     // << here !! (any animation you like)
}

并确保authRouter.viewName始终在DispatchQueue.main上更新。

关于ios - 过渡不适用于 SwiftUI 中的路由器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61981463/

相关文章:

ios - 无法在 iOS 11、Xcode 9 中将类型 'Swift._EmptyArrayStorage' 的值转换为 'NSMutableArray'

Ios 用户通知内容附件(图片)调整大小/隐藏通知扩展(长按)

ios - 大 Realm 压缩文件大小

ios - 如何链接到我们应用程序的更新页面

ios - 如何在堆栈 View 中显示 wkwebview?

ios - JSON 的 Swift 编码/解码图像

swift - 在继续之前获取 [EventLoopF​​uture] 的所有值

ios - 我们如何以12小时格式获取日期

iPhone 3/4 像素完美

android - 在没有应用程序的情况下测试 firebase 云消息传递