尝试在同一视图上的文本字段之间移动后,SwiftUI 应用程序冻结,控制台中没有错误

ben*_*ugh 3 swiftui

我有一个简单的登录视图,包括两个文本字段、一个指向注册视图的导航链接、一个指向忘记密码视图的导航链接和一个登录按钮。我可以选择任一文本字段并输入文本,但是在将文本输入任一文本字段后尝试按下视图上的任何其他控件(文本字段或导航链接),只会冻结应用程序,控制台窗口中没有记录任何错误消息。

我在与旧版本 Xcode / swift 相关的其他帖子中看到,这种类型的行为可以通过在主线程上执行的连续循环来解释,但是我看不出这如何适用于我的情况?

struct LoginForm : View {

    @Binding var emailAddress :  String
    @Binding var password: String

    var body: some View{

        VStack(alignment: .leading){

            Text("Email address")
                .foregroundColor(Color.black)
                .bold()
                .font(.subheadline)
                .padding(.leading, 12)
            TextField("Email",text:$emailAddress)
                .padding()


            Text("Password")
                .foregroundColor(Color.black)
                .bold()
                .font(.subheadline)
                .padding(.leading, 12)
            SecureField("Password",text:$password)
                .padding()

        }


    }
}





struct LoginRootView : View {

    @State private var emailAddress: String = ""
    @State private var password: String = ""
    @EnvironmentObject var authData: AuthData


    var body: some View {


        Group{

            if self.authData.authenticationDidSucceed {

                OnBoardRootView()

            }else{

                NavigationView{

                    ZStack{

                        Image("LoginBG")
                            .resizable()
                            .aspectRatio( contentMode: .fill)
                            .edgesIgnoringSafeArea(.all)
                            .opacity(0.5)


                        VStack(alignment: .leading){


                            Text( "Log into")
                                .font(.largeTitle)
                                .bold()


                            Text( "your account")
                                .font(.largeTitle)
                                .bold()


                                LoginForm(emailAddress:$emailAddress, password:$password)
                                    .padding(.bottom, 8)
                                    .padding(.top, 22)






                            //Login button

                            if emailAddress != "" && password != ""{

                                LoginButton(email:self.emailAddress, password: self.password)
                                    .padding(.vertical, 20.0)
                                    .background(Color.blue, cornerRadius: 30.0)
                                    .padding(.horizontal, 8)


                            }else{

                                LoginButton(email:self.emailAddress, password: self.password)
                                    .padding(.vertical, 20.0)
                                    .background(Color.gray, cornerRadius: 30.0)
                                    .padding(.horizontal, 8)
                                    .disabled(emailAddress == "" || password == "")


                            }




                            //Forgot password link

                            HStack{

                                Text( "Forgot password?")


                                NavigationLink(destination: ForgotPasswordRootView()) {
                                    Text( "Get help signing in")
                                        .bold()

                                }

                            }.padding(.top, 20)


                            Spacer()

                            // Registration Link

                            HStack{

                                Text( "Don't have an account? ")

                                NavigationLink(destination: RegistrationRootView()) {
                                    Text( "Sign Up")
                                        .bold()

                                }

                            }
                            .padding(.bottom, 120)


                        }.padding(.all)
                            .padding(.top, 160)

                        // end of vstack


                    }

                    //end of zstack

                }
                //end of navigation view





            }
            //end of authentication if statement



        }
        //end of group




    }
}





Run Code Online (Sandbox Code Playgroud)

Unc*_*rks 6

您必须重置模拟器。

模拟器:

硬件 -> 擦除所有内容和设置

代码:

  1. 进行干净的构建