简体   繁体   English

导航视图移动了我的目标视图 SwiftUI

[英]Navigation View moved my destination view SwiftUI

I am using Navigation View to create navigation beetween my view by navigation link and i found out a problem i don't know this is bug or error in my code first image is my view look like this in my Subview file and second when i use it to in navigation it's automatic moved like this:我正在使用导航视图通过导航链接在我的视图之间创建导航,我发现了一个问题,我不知道这是我的代码中的错误或错误第一个图像是我的视图在我的子视图文件中看起来像这样,第二个当我使用它在导航中自动移动,如下所示:

在此处输入图像描述 在此处输入图像描述

This is my code on parents view:这是我在父母视图中的代码:

struct OnboardingSet: View {
    
    private var offset : CGFloat = screenFrame.Width
    @State private var currentPage : Int = 0
    @State private var NavigationTag : Int? = nil
    
    var body: some View {
        NavigationView {
            
            NavigationLink(
                destination: SigninView(),
                tag: 1,
                selection: $NavigationTag,
                label: {
                    
                    HStack {
                        OnboardingView(ImageName: Resource.Image.onboarding1, Title: "First, Truth, \nPopular Topic", ButtonTitle: "Skip", TotalPage: 3, CurrentPage: 1) {
                            NavigationTag = 1
                        }
                        OnboardingView(ImageName: Resource.Image.onboarding2, Title: "Fast, Secure, \nMost Loved By User", ButtonTitle: "Skip", TotalPage: 3, CurrentPage: 2) {
                            NavigationTag = 1
                        }
                        OnboardingView(ImageName: Resource.Image.onboarding3, Title: "Feel the \n happiness", ButtonTitle: "sign in", TotalPage: 3, CurrentPage: 3) {
                            NavigationTag = 1
                        }
                    }
                    .offset(x: currentPage == 0 ? offset : 0, y: 0)
                    .offset(x: currentPage == 2 ? -offset : 0, y: 0)
                    .animation(.easeInOut)
                    .gesture(
                        DragGesture(minimumDistance: 5, coordinateSpace: .local)
                            .onEnded({ (value) in
                                if value.translation.width < 0 {
                                    if currentPage != 2 {
                                        currentPage += 1
                                    }
                                }
                                
                                if value.translation.width > 0 {
                                    if currentPage != 0 {
                                        currentPage -= 1
                                    }
                                }
                            })
                    )
                })
        }
    }
    
}

This is my subview:这是我的子视图:

struct SigninView: View {
    
    @ObservedObject private var viewModal = SignInViewModal()
    
    var body: some View {
        ZStack {
            Image(Resource.Image.backgroundSignIn)
                .resizable()
                .aspectRatio(contentMode: .fill)
                .blur(radius: 4)
                .offset(x: 200, y: 10.0)
            
            VStack {
                HStack {
                    Text("Hello Unwary \n Reader")
                        .foregroundColor(.white)
                        .font(.system(size: 42))
                        .fontWeight(.black)
                        .padding(.top,64)
                        .padding(.leading)
                        .shadow(color: .black, radius: 16, x: 16, y: 16)
                    Spacer()
                }
                Spacer()
                
                VStack {
                    BlurTextFeild("Email", Text: $viewModal.Email, TextEntryType: .Open)
                        .frame(width: screenFrame.Width - 30, height: 100)
                    
                    BlurTextFeild("Password", Text: $viewModal.Password,TextEntryType: .Secure)
                        .frame(width: screenFrame.Width - 30, height: 100)
                    
                }.padding()
                
                Button(action: {
                    viewModal.AuthState = viewModal.AuthState == SignInViewModal.authState.signIn ? SignInViewModal.authState.signUp : SignInViewModal.authState.signIn
                }, label: {
                    Text(viewModal.AuthState == SignInViewModal.authState.signIn ? "Create Account" : "LogIn")
                        .foregroundColor(.black)
                        .opacity(0.5)
                        .font(.system(size: 18, weight: .bold, design: .rounded))
                })
                
                Spacer()
                
                Button(action: {
                    
                }, label: {
                    ZStack {
                        
                        Blur(effect: UIBlurEffect(style: .regular))
                        
                        Color.black
                            .opacity(0.3)
                        
                        Text(viewModal.AuthState == SignInViewModal.authState.signIn ? "Sign In" : "Sign Up")
                            .foregroundColor(.white)
                            .font(.system(size: 24))
                    }.frame(width: screenFrame.Width - 100, height: 80)
                    .cornerRadius(16)
                }).padding(.bottom,32)
            }.frame(width: screenFrame.Width, height: screenFrame.Height)
        }
        .edgesIgnoringSafeArea(.all)
        .navigationBarBackButtonHidden(true)
        .frame(width: screenFrame.Width, height: screenFrame.Height + 50, alignment: .center)
    }
}

The provided code is not testable due to many absent dependent components, but I would recommend to remove hardcoded frames (because they make views not flexible) and relayout using only stacks/alignments/paddings.由于缺少许多依赖组件,提供的代码不可测试,但我建议删除硬编码的帧(因为它们使视图不灵活)并仅使用堆栈/对齐/填充重新布局。

            }.frame(width: screenFrame.Width - 100, height: 80)    // !!
            .cornerRadius(16)
        }).padding(.bottom,32)
    }.frame(width: screenFrame.Width, height: screenFrame.Height)   // !!
}
.edgesIgnoringSafeArea(.all)
.navigationBarBackButtonHidden(true)
.frame(width: screenFrame.Width, height: screenFrame.Height + 50, alignment: .center)  // !!

In some cases, you have to make view's frame not hardcore that solve this problem but in my case problem is I added navigation view two times so I had this issue.在某些情况下,您必须使视图的框架不是解决这个问题的核心,但在我的情况下,问题是我添加了两次导航视图,所以我遇到了这个问题。

I removed navigation view in secondary view and that solved my issue completely.我在辅助视图中删除了导航视图,这完全解决了我的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM