Как остановить исчезновение разделителя при вводе текста в текстовое поле с клавиатуры

#swiftui

Вопрос:

Я работаю над представлением входа в систему, и у меня есть два разделителя (), один из которых подчеркивает текстовое поле имени пользователя, а другой-текстовое поле пароля. Используя физическое устройство для моделирования, когда я пытаюсь ввести текст в поле имени пользователя, разделитель под его текстовым полем исчезает, а затем появляется снова, когда я отключаю клавиатуру, однако этого не происходит с разделителем паролей.

Кроме того, такое поведение не возникает, если я удаляю изображение, расположенное поверх текстового поля. Есть какие-либо предложения о том, почему это происходит и как я могу это исправить?

Очень признателен!

 VStack{

    Image(uiImage: #imageLiteral(resourceName: "awText"))
        .resizable()
        .frame(width: 180, height: 100)
        .padding(.bottom, 50)
    
    TextField("Username", text: $username)
        .padding(.leading)
    Divider()
        .padding(.bottom)
        .onChange(of: self.username, perform: { value in
            if value.count > 10 {
                self.username = String(value.prefix(10)) //Max 10 Characters for Username.
            }
        })
        .disableAutocorrection(true)
    
    SecureField("Password", text: $password)
        .padding(.leading)
    Divider()
        .onChange(of: self.username, perform: { value in
            if value.count > 10 {
                self.username = String(value.prefix(10)) //Max 10 Characters for Password.
            }
        })
        .disableAutocorrection(true)

}
 

Ответ №1:

Попробуйте эти коды с прямоугольником!


 struct ContentView: View {
    
    @State private var username: String = String()
    @State private var password: String = String()

    var body: some View {
        
        VStack{
            Image(systemName: "star")
                .resizable()
                .frame(width: 180, height: 100)
                .padding(.bottom, 50)
            
            TextField("Username", text: $username)
                .padding(.leading)
            
            Rectangle().fill(Color.gray.opacity(0.25)).frame(height: 1, alignment: .center).padding(.bottom)
                
   
            SecureField("Password", text: $password)
                .padding(.leading)
            
            Rectangle().fill(Color.gray.opacity(0.25)).frame(height: 1, alignment: .center)

        }
        .disableAutocorrection(true)
        .onChange(of: self.username, perform: { value in
            if value.count > 10 {
                self.username = String(value.prefix(10))
            }
        })
        .onChange(of: self.username, perform: { value in
            if value.count > 10 {
                self.username = String(value.prefix(10))
            }
        })
        
        
    }

}
 

Комментарии:

1. Спасибо. Это определенно обходной путь, но мне все еще любопытно, почему он не работает с разделителем. Это проблема с iOS?

2. У разделителя с этим проблема! логично видеть вашу проблему, я не рекомендую использовать Разделитель, используйте мой код вместо Разделителя