Настроенный TextField не работает в VStack в коде SwiftUI - PullRequest
1 голос
/ 02 февраля 2020

Я настроил текстовое поле и поместил его в VStack, но он не работает, когда я щелкаю текстовое поле. Но это работает хорошо, если я помещу это вне VStack. Пожалуйста, проверьте код и дайте ответы на все вопросы, чтобы решить эту проблему. Заранее спасибо.

struct LoginView: View {

    @State var email = ""
    @State var password = ""

    var body: some View {
        NavigationView {
            VStack {

                // email
                CustomTextField(placeholder: "Working", text: $email, icon: Image(systemName: "envelope.fill"))

                VStack {
                    Text("SIGN IN")
                        .font(.title)
                        .padding()
                        .padding(.top, 16)

                    // email
                    CustomTextField(placeholder: "Not working", text: $email, icon: Image(systemName: "envelope.fill"))


                    // password
                    CustomTextField(placeholder: "Password", text: $password, icon: Image(systemName: "lock.fill"))
                }
                .background(Color.blue)
                .shadow(color: Color.gray, radius: 5)
                .padding(.init(top: 40, leading: 40, bottom: 0, trailing: 40))

            }
            .background(Color(AppColors.shared.themeColor))
            .edgesIgnoringSafeArea(.all)
        } // navigation
        .navigationBarHidden(true)
        .navigationBarBackButtonHidden(true)
        .navigationBarTitle("")
    } // body
} // end view

Здесь настраиваемое текстовое поле =====

struct CustomTextField: View {

    var placeholder: String
    @Binding var text: String
    var icon: Image
    var height: CGFloat = 45

    var body: some View {
        HStack(spacing: 10) {
            TextField(placeholder, text: $text)
                .multilineTextAlignment(.leading)
                .accentColor(Color.black)
                .foregroundColor(Color.black)
                .padding(.init(top: 0, leading: 20, bottom: 0, trailing: 0))

            icon.padding(.init(top: 0, leading: 0, bottom: 0, trailing: 24))
        }
        .background(Color.red)
        .frame(height: height)
        .clipShape(RoundedRectangle(cornerRadius: height/2))
        .overlay(RoundedRectangle(cornerRadius: height/2).stroke(Color.secondary, lineWidth: 1))
        .padding(.init(top: 0, leading: 40, bottom: 0, trailing: 40))

    }
}

1 Ответ

2 голосов
/ 02 февраля 2020

Вы не должны применять .shadow() к VStack. Вместо этого вы можете применить его к каждому элементу отдельно.

...