web-dev-qa-db-fra.com

SWIFTUI: Rembourrage à l'intérieur de la Textfield

J'ai un TextField à Swiftui. Quand j'applique le rembourrage comme

TextField(text, text: $value)
    .padding()

le rembourrage est à l'extérieur de la zone du robinet du TextField, c'est-à-dire en train de taper sur le rembourrage NE PAS apporter au champ de texte.

Je voudrais être capable de concentrer le TextField même si l'utilisateur tourne sur le rembourrage.

5
Vivek Roy

Ajoutez de la hystack autour de votre Textfield, puis de jouer avec Hstack: Exemple:

example textField

         VStack {

                ...
                
                
                HStack {
                        TextField("Social security number", text: $socialNumber)
                            .disableAutocorrection(true)
                }
                .padding()
                .padding(.leading, 30.0)
                .padding(.trailing, 30.0)
                .background(RoundedRectangle(cornerRadius: 12).fill(Theme.color.textFieldBackgroundColor))
                .frame(maxWidth: 315)
                
                ...
            }
            .padding(.top, 0)
            .frame(maxWidth: 350)
0
Tiago Mendes

La seule façon qui a fonctionné pour moi a été d'écrire un Textfieldstyle personnalisé, puis d'ajouter .padding (.horizontal) dans le style.

struct RegisterLoginTextFieldStyle: TextFieldStyle {
    var width: CGFloat
    var height: CGFloat
    var fontSize: CGFloat

    func _body(configuration: TextField<Self._Label>) -> some View {
        configuration
            .frame(width: width, height: height)
            .padding(5)
            .padding(.horizontal)
            .border(Color.black, width: 2)
            .background(Color.textFieldBackground)
            .font(.system(size: fontSize))
            .foregroundColor(.black)
    }
}

...
var body: some View {
    TextField(
        label,
        text: $input
    )
    .padding(.top, 5)
    .textFieldStyle(
        RegisterLoginTextFieldStyle(
            width: width,
            height: height,
            fontSize: placeholderSize
        )
    )
}

Textfield avec rembourrage intérieur horizontal

0
Alex Luque