web-dev-qa-db-fra.com

IOS 14 SWIFTUI Keyboard Ascenseurs View automatiquement

J'utilise Textfield à mon avis et quand il devient le premier répondeur, il augmente la vue comme indiqué dans le gif ci-dessous.

Y a-t-il un moyen de vous débarrasser de ce comportement?

enter image description here

Voici mon code

NavigationView(content: {
    ZStack{
        MyTabView(selectedIndex: self.$index)
            .view(item: self.item1) {
                NewView(title: "Hello1").navigationBarTitle("")
                    .navigationBarHidden(true)
            }
            .view(item: self.item2) {
                NewView(title: "Hello2").navigationBarTitle("")
                    .navigationBarHidden(true)
            }
            .view(item: self.item3) {
                NewView(title: "Hello3").navigationBarTitle("")
                    .navigationBarHidden(true)
            }
    }.navigationBarHidden(true)
    .navigationBarTitle("")
}).ignoresSafeArea(.keyboard, edges: .bottom)

// Nouvelle vue

struct NewView:View {
    @State var text:String = ""
    var title:String
    var body: some View {
        VStack {
            Spacer()
            Text("Hello")
            TextField(title, text: self.$text)
                .textFieldStyle(RoundedBorderTextFieldStyle())
            
        }.padding()
        .onAppear {
            debugPrint("OnApper \(self.title)")
        }
    }
}
6
Malav Soni

Vous devez appliquer le modificateur sur le ZStack, [~ # ~] non [~ # ~] Le NavigationView

NavigationView(content: {
    ZStack{
        ,,,
    }.navigationBarHidden(true)
    .navigationBarTitle("")
    .ignoresSafeArea(.keyboard, edges: .bottom) // <- This line moved up
})

Exemple de travail complet:

struct ContentView: View {
    @State var text = ""
    var body: some View {
        VStack{
            Spacer()
            Text("Hello, World")
            TextField("Tap to test keyboard ignoring", text: $text)
                .textFieldStyle(RoundedBorderTextFieldStyle())
        }
        .padding()
        .ignoresSafeArea(.keyboard, edges: .bottom)
    }
}

Demo

5
Mojtaba Hosseini

Ce qui a finalement travaillé pour moi, combinant des réponses publiées ici et compte également cette question , est la suivante (Xcode 12.4, iOS 14.4):

GeometryReader { _ in
    VStack {
        Spacer()
        TextField("Type something...", text: $value)
        Spacer()
    }.ignoresSafeArea(.keyboard, edges: .bottom)
}

Les deux espaceurs sont là pour centrer verticalement le champ de texte.

Utiliser uniquement la géométryreader ou le modificateur ignoresSafeArea n'a pas fait l'affaire, mais après les avoir mis ensemble, comme indiqué ci-dessus, arrêtez-vous finalement la vue de l'apparence du clavier.

0
Gabb