Ich baue eine Chat-App. Ich muss ein Textfeld verschieben, wenn die Tastatur erscheint. Ich mache das mit dem folgenden Code:
%Vor%Aber wenn ich diesen Code verwende, werden die ersten Nachrichten nicht angezeigt. Ich denke, ich muss die Tabellenansicht anpassen.
Hier sind Screenshots Vorher und Nach erscheint die Tastatur:
Ich verwende automatisches Layout.
Wie kann ich dieses Problem lösen?
Sie können einen Auslass der unteren automatischen Layoutbeschränkung Ihrer Tabellenansicht erstellen.
Dann benutze einfach diesen Code:
%Vor%Wenn Sie Probleme beim Erstellen der unteren Einschränkung haben:
Im Storyboard
|-[]-|
. Jetzt können Sie es auf Ihren View-Controller ziehen und als Steckdose hinzufügen.
Eine andere Lösung ist, tableView.contentInset.bottom
zu setzen. Aber ich habe das vorher nicht getan. Wenn Sie das bevorzugen, kann ich versuchen, es zu erklären.
Verwenden des Einschubs:
%Vor%Sie können diesen Code zum Setzen des Insets verwenden. Ich habe es selbst noch nicht versucht, aber es sollte so sein.
EDIT: Änderte die Dauer mit dem Hinweis von nacho4d
Basierend auf Eendjes Konzept .........
1) kopieren und fügen Sie KUIViewController in Ihr Projekt ein,
2) Erstellen Sie die Einschränkung - es ist einfach Ihre "untere Einschränkung" für Ihren Inhalt
3) Vergessen Sie nicht, die Constraint-ID einfach auf bottomConstraintForKeyboard
Hinweis - Sie können .view
nicht verwenden - die Größe von .view! kann leider nicht geändert werden.
Machen Sie also einfach eine UIView namens "holder". Es sitzt in .view
. Setzen Sie alles von Ihnen in den Halter. Inhaber hat natürlich vier einfache Einschränkungen oben / unten / links / rechts zu .view
.
Diese untere Einschränkung auf "Halter" ist tatsächlich bottomConstraintForKeyboard
in der Klasse hier.
(In ungewöhnlichen Situationen möchten Sie vielleicht nur bestimmte andere Dinge über die Tastatur zerquetschen und den Rest in Ruhe lassen. Wenn Sie dies tun möchten, haben Sie bei der Verwendung des KUIViewController-Ansatzes absolute Flexibilität "Einschränkung stattdessen."
Normalerweise in modernen UX, wenn Sie in den "Hintergrund" klicken (also: weg von irgendwelchen Knöpfen, Eingabefeldern, usw.) sollte es die Tastatur entlassen.
Die KUIViewController-Klasse automatisiert dies tatsächlich vollständig.
%Vor%Sie können
Auf diesen Bildschirmen:
Die Seite (Ihre. holder
-Ansicht) wird automatisch skaliert, um die Tastatur zu ermöglichen, wenn eine Tastatur vorhanden ist. Es wird schön animieren.
Wenn der Benutzer auf "aus" klickt (auf den "Hintergrund" klickt), wird die Tastatur geschlossen.
Ein Detail - (leider) klickt auf Ihren Inhalt wird auch die Tastatur verlassen. (Sie bekommen beide das Event.) Allerdings: das ist fast immer korrektes Verhalten im üblichen Apple-Stil : Probieren Sie es aus. Es ist nicht sinnvoll, dies zu vermeiden.
Aktualisierung! Siehe die neuen Kommentare in iPruch answer.
Von @Fatties Nachricht:
Ein Detail - (leider) klickt auf Ihre Inhalte wird auch die Tastatur zu schließen. (Sie bekommen beide das Ereignis.) Dies ist jedoch fast immer korrektes Verhalten; Versuche es. Es gibt keinen vernünftigen Weg, dies zu vermeiden, also vergiss es und geh mit dem Apple-Flow.
Dies kann durch die Implementierung der folgenden Methode UIGestureRecognizerDelegate gelöst werden:
%Vor% Auf diese Weise ruft der Gestenerkenner die Methode UIControl
nicht auf, wenn der Benutzer clearKeyboard()
(UIButton, UITextField usw.) berührt.
Damit dies funktioniert, denken Sie daran, UIGestureRecognizerDelegate entweder in der Klassendefinition oder mit einer Erweiterung abzuleiten. Dann sollten Sie in viewDidLoad () den Gestenerkennungsdelegierten als self zuweisen.
Bereit zum Kopieren und Einfügen von Code:
%Vor%Wenn Sie nicht selbst damit kämpfen möchten, finden Sie möglicherweise das TPKeyboardAvoiding -Rahmenwerk nützlich
Folgen Sie einfach den "Installationsanweisungen", d. h. ziehen Sie die entsprechenden .h / .m-Dateien per Drag & Drop in Ihr Projekt und machen Sie dann ScrollView / TableView zu einer Unterklasse wie unten:
Tags und Links ios swift autolayout