Ich suche hier nach zwei Zahlen: der Höhe im Portrait und der Höhe im Querformat. Antworten Sie nicht in cm oder Zoll, sondern in Pixeln.
Die Porträthöhe beträgt 264, die Landschaftshöhe 352.
Ich weiß, dass dies eine späte Antwort ist, aber ich bin gerade auf diese Frage gestoßen.
- (void) keyboardWasShown:(NSNotification *)nsNotification {
NSDictionary *userInfo = [nsNotification userInfo];
CGSize kbSize = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
NSLog(@"Height: %f Width: %f", kbSize.height, kbSize.width);
// Portrait: Height: 264.000000 Width: 768.000000
// Landscape: Height: 352.000000 Width: 1024.000000
}
Die Antwort lautet: es kommt darauf an .
Ich kenne 16 verschiedene Höhen, die die Tastatur annehmen kann, und sie kann sich in jeder Position befinden.
Es ist anders für:
Ich habe ein Bild angehängt, das verschiedene mögliche Konfigurationen zeigt.
Anstatt alle 16 Möglichkeiten aufzuzählen, denke ich, möchten Sie UIKeyboardWillShowNotification
/UIKeyboardWillHideNotification
und UIKeyboardDidChangeFrameNotification
(iOS 5.0+) beobachten und dann den Rahmen der Tastatur von diesen Ereignissen abrufen.
Auf dem iPad kann die Tastaturgröße auch von der Sprache abhängen (beispielsweise ist die japanische Tastatur größer). Ein weiterer Grund, es programmgesteuert abzufragen.
Sie können die Tastaturhöhe aus dem userInfo - Wörterbuch abrufen, das von der will/did-Tastaturbenachrichtigung angezeigt/verborgen wird, wie von der UIWindow-Klasse ( Referenzhandbuch link ) angegeben. Dies ist ein viel besserer Weg, um die Höhe zu erhalten, als durch die Kodierung, weil Sie die folgenden Vorteile haben:
In der Tat haben die Antworten auf diese Frage, die eine genaue Zahl angeben, höchstwahrscheinlich diese Zahl erhalten, indem sie sich die Ergebnisse ansehen, die in diesem Wörterbuch zurückgegeben werden!
Ich habe auf dieser Seite für down ein paar Antworten gestimmt, da diese gefährlich irreführend sind.
Unter iOS 8 können Sie keine fest codierte Tastaturhöhe verwenden .
Hier ist meine App, die auf einem iPhone ausgeführt wird, um meine Gründe dafür anzugeben.
Nimm dein Lineal und sag mir, wie hoch ist die Bildschirmtastatur?
Ahh ... du kannst es nicht tun, oder?
Die Höhe kann variieren, wenn der Benutzer die automatische Eingabeleiste oben auf der Bildschirmtastatur aktiviert (die übrigens ein zweites "keyboardWillShow
" - Ereignis auslöst).
Gleiches gilt für die Bildschirmtastatur auf dem iPad.
Fazit: Leute, Sie müssen die Tastaturhöhe in einem keyboardWillShow
-Ereignis messen.
Sie werden sonst Probleme treffen.
- (void)keyboardWillShow:(NSNotification *)notification {
NSDictionary *info = [notification userInfo];
NSValue *kbFrame = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect keyboardFrame = [kbFrame CGRectValue];
keyboardFrame = [self.view convertRect:keyboardFrame fromView:nil];
CGFloat heightOfKeyboard = keyboardFrame.size.height;
NSLog(@"The keyboard is now %d pixels high.", (int)heightOfKeyboard);
}
Übrigens, vergessen Sie diesen Aufruf von convertRect
im obigen Code nicht.
Ohne sie hätte ich festgestellt, dass auf einem iPad im Querformat mit iOS 8 die Tastatur manchmal eine Höhe von 1024 Pixel aufweist.
Nur noch eine Sache ...
Heute arbeitete ich an einem benutzerdefinierten Steuerelement, das ich geschrieben hatte und das am unteren Rand des iPhone/iPad-Bildschirms angezeigt wird, und stellte fest, dass ich die Höhe der Bildschirmtastatur nicht berücksichtigt hatte.
Ich wollte keine keyboardWillShow/Hide-Benachrichtigungen hinzufügen, da dieses kleine Steuerelement allgemeiner Natur ist und von jedem meiner Bildschirme aufgerufen werden kann.
Meine Lösung, um die Höhe der Bildschirmtastatur zu ermitteln, bestand darin, die ausgezeichnete Funktion visibleKeyboardHeight des freien Steuerelements SVProgressHUD
zu verwenden.
Das Steuerelement also benötigte die Höhe der Bildschirmtastatur, damit die Benachrichtigungsmeldung UIView
s vertikal zentriert angezeigt wird.
Es hat wunderbar geklappt. Wenn Sie also do eine schnelle Methode zum Abrufen der Tastaturhöhe benötigen, greifen Sie zu einer Kopie dieses Codes und lesen Sie die SVProgressHUD.m Datei.
Sie können dies programmgesteuert herausfinden (durch den Simulator, wenn Sie kein Gerät haben).
In iOS 7 für iPad sind es 402 für Landscape und 314 für Portrait
Ich weiß nicht, was es ist, aber Sie könnten es leicht genug herausfinden.
Surfen Sie auf Ihrem iPad zu einer Seite mit diesem ...
var totalHeight = window.innerHeight;
document.getElementById('what-is-my-height').onclick = function() {
alert(totalHeight - window.innerHeight);
};
<button id="what-is-my-height">Bring up keyboard, then Push me</button>
Klicken Sie auf die Schaltfläche (nachdem Sie die Bildschirmtastatur aufgerufen haben), und die Höhe sollte angezeigt werden. Wiederholen Sie dies für die andere Ausrichtung.
Höhen sind: PORTRAIT = 264 LANDSCHAFT = 352
In iOS 7 gab es ein Problem, bei dem Höhe und Breite im Querformat nicht vertauscht wurden, das Problem jedoch in iOS 8 behoben wurde.
Hier ist der Code, der immer die Höhe für iOS7 oder iOS8 zurückgibt, wodurch die versionsspezifische Überprüfung in Ihrem Code entfällt.
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
//Always gives the height as the height is of smaller dimension
CGFloat height = (kbSize.height>kbSize.width)?kbSize.width:kbSize.height;
}
Ich denke, es gibt mehr Probleme, als in anderen Antworten gelöst werden. Zum Beispiel können Sie mit dieser Tastatur enden:
Dies geschieht, wenn Sie auf der iPad-Tastatur unter iOS 9 auf die Schaltfläche "Ausblenden" klicken. Diese Tastatur hat noch eine full
-Größe in Benachrichtigungsinformationen von Mike Gledhill
answer. (In UIKeyboardFrameEndUserInfoKey
ist die Höhe der Tastatur höher als 300).
Ich musste den y-Achsenursprung der Tastatur von der Gerätehöhe abziehen, um den korrekten Wert zu erhalten.
- (void)keyboardWillShow:(NSNotification *)notification
NSDictionary *info = [aNotification userInfo];
CGRect keyboardFrame = [info[UIKeyboardFrameBeginUserInfoKey] CGRectValue];
keyboardFrame = [info[UIKeyboardFrameEndUserInfoKey] CGRectValue];
keyboardFrame = [self.view convertRect:keyboardFrame fromView:nil];
CGFloat yPosition = keyboardFrame.Origin.y;
NSInteger height = [UIScreen mainScreen].bounds.size.height - yPosition;
}
Funktioniert für mich auf iOS9 mit iPhones und iPads in beiden Ausrichtungen.