Ändern Sie die Größe des Bildschirms, wenn die Tastatur angezeigt wird

9

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?

    
Okan 07.06.2015, 08:58
quelle

4 Antworten

11

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

  • Wählen Sie Ihre Suchleiste.
  • An der Ecke unten rechts sehen Sie 3 Symbole. Klicken Sie auf den mittleren, der aussieht wie |-[]-| .
  • Oben im Popup befinden sich 4 Felder. Geben Sie 0 für den unteren Wert ein.
  • Einschränkung erstellt!

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

    
Eendje 07.06.2015 09:10
quelle
10

2017

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

zu ziehen

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."

Problem 2 ... klicken Sie auf 'Hintergrund', um die Tastatur zu löschen

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

... verwenden Sie KUIViewController überall dort, wo eine Tastatur angezeigt wird.

%Vor%

Auf diesen Bildschirmen:

  1. Die Seite (Ihre. holder -Ansicht) wird automatisch skaliert, um die Tastatur zu ermöglichen, wenn eine Tastatur vorhanden ist. Es wird schön animieren.

  2. 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.

    
Fattie 23.01.2017 14:12
quelle
2

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%     
iPruch 14.07.2017 12:04
quelle
1

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:

    
Chris 07.06.2015 10:18
quelle

Tags und Links