Ich habe diesen Code verwendet, um die Größe der Tastatur zu bestimmen:
- (void)keyboardWillChange:(NSNotification *)notification {
NSDictionary* keyboardInfo = [notification userInfo];
NSValue* keyboardFrameBegin = [keyboardInfo valueForKey:UIKeyboardFrameBeginUserInfoKey];
CGRect keyboardFrameBeginRect = [keyboardFrameBegin CGRectValue];
}
Ich führe dies im Simulator aus.
Das Problem ist, dass seit iOS 8 dies nicht den richtigen Wert ergibt. Wenn die Tastaturvorschläge aktiv sind oder wenn ich sie nach unten drücke, erhalte ich unterschiedliche (nicht korrekte) Werte.
Wie kann ich die genaue Größe der Tastatur einschließlich der Tastaturvorschläge ermitteln?
ios
objective-c
cocoa-touch
keyboard
ios8
Eli Braginskiy
quelle
quelle
keyboardFrameBeginRect
in lokale Koordinaten konvertieren .Antworten:
Verwenden
quelle
Mit der Einführung benutzerdefinierter Tastaturen in iOS wird dieses Problem etwas komplexer.
Kurz gesagt, die UIKeyboardWillShowNotification kann durch benutzerdefinierte Tastaturimplementierungen mehrmals aufgerufen werden:
Um diese Szenarien in einer Codezeile richtig zu behandeln, müssen Sie:
Registrieren Sie Beobachter für die Benachrichtigungen UIKeyboardWillShowNotification und UIKeyboardWillHideNotification :
Erstellen Sie eine globale Variable, um die aktuelle Tastaturhöhe zu verfolgen:
Implementieren Sie keyboardWillShow , um auf die aktuelle Änderung der Tastaturhöhe zu reagieren:
HINWEIS: Möglicherweise möchten Sie das Versetzen von Ansichten animieren. Das Info- Wörterbuch enthält einen von UIKeyboardAnimationDurationUserInfoKey eingegebenen Wert . Dieser Wert kann verwendet werden, um Ihre Änderungen mit der gleichen Geschwindigkeit wie die angezeigte Tastatur zu animieren.
Implementieren Sie keyboardWillHide zum Zurücksetzen von _currentKeyboardHeight und reagieren Sie darauf, dass die Tastatur geschlossen wird:
quelle
KEYBOARD BEGIN RECT: (0.0, 375.0, 667.0, 162.0) ... KEYBOARD END RECT: (0.0, 213.0, 667.0, 162.0)
Ich hatte auch dieses Problem, bis ich auf diesen StackOverflow- Artikel stieß:
Konvertieren Sie UIKeyboardFrameEndUserInfoKey
Dies zeigt Ihnen, wie Sie die
convertRect
Funktion verwenden, um die Größe der Tastatur in etwas Verwendbares umzuwandeln, jedoch auf dem Bildschirm.Zuvor hatte ich eine iPad-App, die verwendet
UIKeyboardFrameEndUserInfoKey
, aber nicht verwendet wurdeconvertRect
, und sie funktionierte einwandfrei.Aber mit iOS 8 funktionierte es nicht mehr richtig. Plötzlich wurde gemeldet, dass meine Tastatur, die auf einem iPad im Querformat ausgeführt wurde, 1024 Pixel hoch war .
Bei iOS 8 ist es daher wichtig, dass Sie diese
convertRect
Funktion verwenden.quelle
Die ähnliche Lösung wie in Gang 2.0 von dgangsta :
quelle
Ich mache
extension
fürUIViewController
Sie können wie folgt verwenden:
quelle
inputContainerBottom
?Es gibt Zeiten, in denen Entwickler die Tastaturhöhe kennen müssen, bevor sie tatsächlich angezeigt wird, damit sie die Benutzeroberfläche entsprechend vorab gestalten können.
Wenn dies der Fall ist, finden Sie hier eine umfassende Spezifikation:
Dies schließt die Quick Type-Leiste oben ein, da diese in allen aktuellen Versionen von iOS standardmäßig aktiviert ist.
Hier ist das schnelle 3-Benachrichtigungs-Setup, mit dem ich dies getestet habe, falls jemand es benötigt:
quelle
Nur eine Saite für Swift:
UIKeyboardFrameEndUserInfoKey
speichert immerNSValue
, so dass es nicht nötig ist, es zu überprüfen.quelle
Beim Umschalten zwischen der Standardtastatur und einer benutzerdefinierten (
UIPickerView
) Tastatur wurde ein Problem festgestellt. Die benutzerdefinierte Tastatur zeigte nach dem Wechsel von der Standardtastatur eine Höhe von 253 anstelle von 162 an.In diesem Fall funktionierte die Einstellung
autocorrectionType = UITextAutocorrectionTypeNo;
für das Eingabefeld mit der benutzerdefinierten Tastatur.Das Problem trat nur in iOS 8 auf (nur auf dem Simulator getestet). Es tritt in iOS 9 (Simulator oder Gerät) nicht auf.
quelle
In Swift nicht in einer Zeile ...
quelle
quelle