Verwenden Sie nicht den letzten Link "iPhone-Abmessungen"! Es ist aus dem Jahr 2011, bevor iOS 8 auf den Markt kam und die Höhe der Bildschirmtastatur variieren konnte.
Mike Gledhill
@ MikeGledhill auf dem Bildschirm Tastaturhöhe variieren noch vor iOS 8.
ReDetection
Verwandte Themen: Wenn Sie nach den tatsächlichen Werten der Tastaturhöhen suchen (z. B. zu Debug-Zwecken), lesen Sie die Tastaturhöhen
Sinnvoll
Antworten:
211
Ich habe den folgenden Ansatz verwendet, um den Rahmen der Tastatur in iOS 7.1 zu bestimmen.
In der Init-Methode meines View Controllers habe ich mich registriert für UIKeyboardDidShowNotification:
Dann habe ich den folgenden Code verwendet keyboardOnScreen:, um Zugriff auf den Rahmen der Tastatur zu erhalten. Dieser Code ruft das userInfoWörterbuch aus der Benachrichtigung ab und greift dann auf das NSValuezugehörige zu UIKeyboardFrameEndUserInfoKey. Sie können dann auf CGRect zugreifen und es in die Koordinaten der Ansicht Ihres Ansichtscontrollers konvertieren. Von dort aus können Sie alle erforderlichen Berechnungen basierend auf diesem Frame durchführen.
Obwohl es ein bisschen kompliziert zu sein scheint, ist dies sicherlich besser als die Hardcodierung der Tastaturgröße. Korrekte Antwort.
n13
2
Stimmte diese Antwort ab und stimmte die Frage ab. OP weiß definitiv nicht, wovon er spricht. Seid vorsichtig, Leute! Diese Antwort ist die richtige!
superarts.org
2
eine Ergänzung für Landscape: if (SYSTEM_VERSION_LESS_THAN (@ "8.0")) {_keyboardHeight = keyboardFrame.size.width; } else {_keyboardHeight = keyboardFrame.size.height; }
LiangWang
3
Gibt es eine Möglichkeit, dies zu tun, ohne dass die Tastatur angezeigt wird? In meinem Fall möchte ich etwas hinter der Tastatur mit der gleichen Höhe haben (ähnlich wie Boten Dinge haben)
John
@ superarts.org Es besteht keine Notwendigkeit, die Frage abzustimmen. Leute werden höchstwahrscheinlich danach suchen, und sie werden jetzt diese Antwort sehen .. also ist alles gut :)
Ja͢ck
46
Denken Sie daran, dass unter iOS 8 die Größe der Bildschirmtastatur variieren kann . Gehen Sie nicht davon aus, dass die Bildschirmtastatur immer sichtbar (mit einer bestimmten Höhe) oder unsichtbar ist.
Mit iOS 8 kann der Benutzer jetzt auch den Textvorhersagebereich ein- und ausschalten ... und wenn er dies tut, wird das keyboardWillShowEreignis einer App erneut gestartet .
Dadurch werden viele ältere Codebeispiele zerstört, in denen empfohlen wurde, ein keyboardWillShowEreignis zu schreiben , das lediglich die aktuelle Höhe der Bildschirmtastatur misst, und die Steuerelemente auf der Seite um diesen (absoluten) Betrag nach oben oder unten zu verschieben.
Mit anderen Worten, wenn Sie einen Beispielcode sehen, der Sie lediglich auffordert, einen hinzuzufügen keyboardWillShow Ereignis , die Tastaturhöhe zu messen und die Höhe Ihrer Steuerelemente um diesen Betrag zu ändern, funktioniert dies nicht mehr immer.
In meinem obigen Beispiel habe ich den Beispielcode von der folgenden Site verwendet, der die vertikalen Einschränkungen animiert constant Wert für .
In meiner App habe ich eine Einschränkung zu meiner hinzugefügt UITextView , die am unteren Bildschirmrand festgelegt ist. Als der Bildschirm zum ersten Mal angezeigt wurde, habe ich diesen anfänglichen vertikalen Abstand gespeichert.
Jedes Mal, wenn mein keyboardWillShowEreignis gestartet wird, füge ich die (neue) Tastaturhöhe zu diesem ursprünglichen Einschränkungswert hinzu (damit die Einschränkung die Höhe des Steuerelements ändert).
Ja. Es ist hässlich.
Und ich bin ein wenig verärgert / überrascht, dass das schrecklich schmerzhafte AutoLayout von XCode 6 es uns nicht nur ermöglicht, die unteren Steuerelemente entweder am unteren Bildschirmrand oder am oberen Rand der Bildschirmtastatur anzubringen.
Tatsächlich variiert die Tastaturgröße immer, selbst bei älteren iOS-Versionen. zB Handschrift chinesische Sprache überprüfen
ReDetection
Hoppla, das habe ich nicht bemerkt. Ich fand es nur seltsam, dass so viele "keyboardWillShow" -Beispiele immer davon ausgegangen sind, dass dieses Ereignis nur einmal aufgerufen wird, wenn die Tastatur erscheint oder verschwindet.
Mike Gledhill
1
@ MikeGledhill Ich denke, Sie werden "UIKeyboardWillChangeFrameNotification" für die Änderung des Rahmens aufgrund von Drehung oder Anzeigen (/ Ausblenden) der Textvorhersageleiste verwenden ...
Abdalrahman Shatou
Ich habe das gerade mit meiner App getestet. Die UIKeyboardWillChangeFrameNotification wird immer ASWELL AS als keyboardWillShow-Ereignis aufgerufen, wenn ich entweder die Tastatur anzeigen lasse oder den Textvorhersagebereich ein- oder ausschalte. Es hilft also nicht wirklich viel. Mein Punkt ist ... Benutzer müssen mit diesen Ereignissen ein wenig vorsichtig sein, das ist alles.
Mike Gledhill
1
Warum hat das nicht viel mehr Aufmerksamkeit?
Rfoo
30
Die Tastaturhöhe beträgt 216 Punkte für den Hochformatmodus und 162 Punkte für den Querformatmodus.
Wenn Sie selbst beantwortete Fragen stellen möchten, geben Sie zumindest angemessene Antworten. Die Größe der Tastatur sollte vom Benachrichtigungsobjekt bezogen werden, nicht von einem fest codierten Wert, der von einer Website stammt. Siehe hier
jrturton
16
@jrturton Die Frage ist nicht, wie man die Höhe programmgesteuert findet. Diese Frage ist nicht nur für Programmierer nützlich, sondern auch für Grafikdesigner und dergleichen. Die Antwort, nach der Sie fragen, gehört zu einer anderen Frage. In der Tat gibt es eine andere Frage mit dieser Antwort: stackoverflow.com/a/7302291/310121
Erik B
48
@ErikB Sei vorsichtig. Die Tastaturgröße hängt von der Sprache und dem Tastaturtyp ab.
Gabriel
13
Verwenden Sie für sich selbst NIEMALS den fest codierten Wert! Als starkes Beispiel kann ein Benutzer die geteilte (zweiteilige) Tastatur verwenden, bei der die Höhe nicht besonders wichtig ist.
Timo
6
Diese Antwort ist faul und gefährlich. Die Tastaturhöhe erhalten Sie über die UIKeyboardDidShowNotification, da sich der tatsächliche Wert zwischen den Hauptversionen von iOS tendenziell ändert. Siehe Kens Antwort unten.
Alexander
16
Versionshinweis: Dies ist in iOS 9 und 10 kein Wert mehr, da sie benutzerdefinierte Tastaturgrößen unterstützen.
Dies hängt vom Modell und der QuickType-Leiste ab:
Antworten:
Ich habe den folgenden Ansatz verwendet, um den Rahmen der Tastatur in iOS 7.1 zu bestimmen.
In der Init-Methode meines View Controllers habe ich mich registriert für
UIKeyboardDidShowNotification
:Dann habe ich den folgenden Code verwendet
keyboardOnScreen:
, um Zugriff auf den Rahmen der Tastatur zu erhalten. Dieser Code ruft dasuserInfo
Wörterbuch aus der Benachrichtigung ab und greift dann auf dasNSValue
zugehörige zuUIKeyboardFrameEndUserInfoKey
. Sie können dann auf CGRect zugreifen und es in die Koordinaten der Ansicht Ihres Ansichtscontrollers konvertieren. Von dort aus können Sie alle erforderlichen Berechnungen basierend auf diesem Frame durchführen.Schnell
Und die äquivalente Implementierung mit Swift:
quelle
Denken Sie daran, dass unter iOS 8 die Größe der Bildschirmtastatur variieren kann . Gehen Sie nicht davon aus, dass die Bildschirmtastatur immer sichtbar (mit einer bestimmten Höhe) oder unsichtbar ist.
Mit iOS 8 kann der Benutzer jetzt auch den Textvorhersagebereich ein- und ausschalten ... und wenn er dies tut, wird das
keyboardWillShow
Ereignis einer App erneut gestartet .Dadurch werden viele ältere Codebeispiele zerstört, in denen empfohlen wurde, ein
keyboardWillShow
Ereignis zu schreiben , das lediglich die aktuelle Höhe der Bildschirmtastatur misst, und die Steuerelemente auf der Seite um diesen (absoluten) Betrag nach oben oder unten zu verschieben.Mit anderen Worten, wenn Sie einen Beispielcode sehen, der Sie lediglich auffordert, einen hinzuzufügen
keyboardWillShow
Ereignis , die Tastaturhöhe zu messen und die Höhe Ihrer Steuerelemente um diesen Betrag zu ändern, funktioniert dies nicht mehr immer.In meinem obigen Beispiel habe ich den Beispielcode von der folgenden Site verwendet, der die vertikalen Einschränkungen animiert
constant
Wert für .AutoLayout üben
In meiner App habe ich eine Einschränkung zu meiner hinzugefügt
UITextView
, die am unteren Bildschirmrand festgelegt ist. Als der Bildschirm zum ersten Mal angezeigt wurde, habe ich diesen anfänglichen vertikalen Abstand gespeichert.Jedes Mal, wenn mein
keyboardWillShow
Ereignis gestartet wird, füge ich die (neue) Tastaturhöhe zu diesem ursprünglichen Einschränkungswert hinzu (damit die Einschränkung die Höhe des Steuerelements ändert).Ja. Es ist hässlich.
Und ich bin ein wenig verärgert / überrascht, dass das schrecklich schmerzhafte AutoLayout von XCode 6 es uns nicht nur ermöglicht, die unteren Steuerelemente entweder am unteren Bildschirmrand oder am oberen Rand der Bildschirmtastatur anzubringen.
Vielleicht fehlt mir etwas.
Anders als meine geistige Gesundheit.
quelle
Die Tastaturhöhe beträgt 216 Punkte für den Hochformatmodus und 162 Punkte für den Querformatmodus.
Quelle
quelle
Versionshinweis: Dies ist in iOS 9 und 10 kein Wert mehr, da sie benutzerdefinierte Tastaturgrößen unterstützen.
Dies hängt vom Modell und der QuickType-Leiste ab:
http://www.idev101.com/code/User_Interface/sizes.html
quelle
Die Höhe der Tastatur hängt vom Modell, der QuickType-Leiste, den Benutzereinstellungen usw. ab. Der beste Ansatz ist die dinamische Berechnung:
Swift 3.0
quelle
Ich kann die neueste Antwort nicht finden, daher überprüfe ich alles mit dem Simulator. (IOS 11.0)
Gerät | Bildschirmhöhe | Porträt | Landschaft
iPhone 4s | 480.0 | 216,0 | 162.0
iPhone 5, iPhone 5s, iPhone SE | 568,0 | 216,0 | 162.0
iPhone 6, iPhone 6s, iPhone 7, iPhone 8, iPhone X | 667,0 | 216,0 | 162.0
iPhone 6 plus, iPhone 7 plus, iPhone 8 plus | 736,0 | 226,0 | 162.0
iPad 5. Generation, iPad Air, iPad Air 2, iPad Pro 9.7, iPad Pro 10.5, iPad Pro 12.9 | 1024.0 | 265,0 | 353.0
Vielen Dank!
quelle
iPhone
Tastaturgrößen:
2,6 S, 6,7,8: (375 × 667): Tastaturgröße = (0,0, 407,0, 375,0, 260.
3,6 +, 6S +, 7+, 8+: (414 × 736) Tastaturgröße = (0,0, 465,0, 414,0, 271,0)
4.XS, X: (375 x 812) Tastaturgröße = (0,0, 477,0, 375,0, 335,0)
5.XR, XSMAX ((414 x 896) Tastaturgröße = (0,0, 550,0, 414,0, 346,0)
quelle