KeyboardAvoidingView - Reset die Höhe, wenn die Tastatur ausgeblendet ist
Ich bin mit Reagieren Eingeborenen KeyboardAvoidingView
zum einstellen der Höhe meiner View
wenn die Tastatur angezeigt wird. Aber wenn ich in der Nähe der Tastatur in der app die Höhe der Ansicht wird nicht geändert, zurück auf den ursprünglichen Wert.
<KeyboardAvoidingView behavior="height" style={styles.step}>
<View style={styles.stepHeader}>
//my content
</View>
</KeyboardAvoidingView>
Die Ansicht mit dem roten Umriss nahm den ganzen Raum, bevor ich Sie öffnete und Schloss die Tastatur.
- Ich erlebe das gleiche Problem. [iOS] Hast du eine Lösung gefunden?
- Für einige Fälle, die ich eingeschaltet, um das folgende Paket funktioniert, aber die Komponente, RN bietet funktioniert immer noch nicht. github.com/APSL/react-native-keyboard-aware-scroll-view
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine ausführlichere Erklärung Das Nisarg's Antwort.
Erstellen Sie einen Schlüssel für das
KeyboardAvoidingView
im Konstruktoradd-listener auf der Tastatur s/verbarg (und entfernen Sie es in der willUnmount)
update der
keyboardAvoidingViewKey
imkeyboardHideListener
Funktion, soll ein neuer Wert jedes mal (ich habe ein timestamp) und verwenden Sie diese Taste, wenn das rendering derKeyboardAvoidingView
element.Hinweis:
Beachten Sie, dass diese neu erstellt die Elemente innerhalb der
KeyboardAvoidingView
(ich.e: nenne Ihrenconstructor
Funktion, ich bin mir nicht ganz sicher, warum, ich werde aktualisieren, die Antwort nach der tieferen Untersuchung), so müssen Sie zu verfolgen, jeder Staat/prop-Werte, die überschrieben werden kannUpdate
Nach eine viel tiefere Untersuchung, ich weiß jetzt, warum die views neu erstellt werden, sobald Sie den Schlüssel ändern.
Um wirklich zu verstehen, warum es passiert, muss man vertraut sein mit, wie reagieren-native löst die render-Befehle an die systemeigene Seite, diese Besondere Erklärung ist ziemlich lang, wenn es Sie interessiert, können Sie Lesen meine Antwort hier. Kurz gesagt, reagieren-native verwendet Reactjs zu diff die änderungen, die dargestellt werden soll, diese Unterschiede werden dann gesendet, als Befehle zu einer Komponente namens
UIManager
versendet Imperativ Befehle, die zu übersetzen in eine layout-Struktur, welche änderungen das layout basiert auf dem diff-Befehle.Sobald Sie eine Taste auf eine Komponente, reactjs nutzt Sie diese Taste, um änderungen zu erkennen, sagte der Komponente, wenn diese Taste ändert, reactjs kennzeichnet die Komponente als eine komplett neue zu, die im Gegenzug sendet der erste Befehl zu erstellen, die Sprach-Komponente, so dass alle Kinder, die neu erstellt werden, da es identifiziert als neue Elemente in eine neue layout-Baum, löschen Sie den alten Baum und einen neuen zu erstellen anstatt einfach einstellen der diffs
Wenn Sie möchten, können Sie tatsächlich spy auf diese versendeten Nachrichten, indem Sie den folgenden code auf Ihre
App.js
Datei:Wenn Sie das tun, werden Sie feststellen, in die Protokolle, die jedes mal den key ändert, der Befehl, der ausgelöst wird, im Gegenzug ist
createViews
, die wie oben angegeben erstellt alle Elemente, die geschachtelt sind unter den besagten Komponente.this.setState
ist nicht eine Funktion, ändernthis.keyboardHideListener
zuthis.keyboardHideListener.bind(this)
imcomponentDidMount
.key={keyboardAvoidingViewKey}
zukey={this.state.keyboardAvoidingViewKey}
auf die KeyboardAvoidingView.Bitte geben Sie-Taste, um KeyboardAvoidingView und ändern, wenn die Tastatur öffnen und schließen, damit es gerendert wird und nehmen Höhe
Wrap-Komponenten in
<KeyboardAvoidingView behavior="padding" style={styles}>
auf iOS und<View style={styles}>
auf androidEine einfache Lösung ist, um die
behavior
Eigenschaft desKeyboardAvoidingView
für 'padding'. Dies vermeidet das Problem der Erinnerung an dieconstructor
- Funktion, die ermöglicht es Ihnen, sicher zu speichern Informationen, die im Zustand (sagen wir, Sie haben zweiInput
s und Sie möchten, um den Wert zu speichern den text in Staat, selbst wenn der Benutzer stürzt die Tastatur in zwischen auf die zwei Eingänge).Diese Methode kann leicht ändern Sie das layout der
KeyboardAvoidingView
's Kinder, so sich dessen bewusst sein.