Wie hoch ist die Bildschirmtastatur des iPhones?


84

Die Höhe im Hochformat und die Höhe in der Landschaft gemessen in Punkten.


2
Hier finden Sie alle Dimensionen eines iPhone: iPhone Dimensionen
Pfitz

3
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:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(keyboardOnScreen:) name:UIKeyboardDidShowNotification object:nil];

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.

-(void)keyboardOnScreen:(NSNotification *)notification 
 {
        NSDictionary *info  = notification.userInfo;
        NSValue      *value = info[UIKeyboardFrameEndUserInfoKey];

        CGRect rawFrame      = [value CGRectValue];
        CGRect keyboardFrame = [self.view convertRect:rawFrame fromView:nil];

        NSLog(@"keyboardFrame: %@", NSStringFromCGRect(keyboardFrame));
 }

Schnell

Und die äquivalente Implementierung mit Swift:

NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: UIResponder.keyboardDidShowNotification, object: nil)


@objc
func keyboardDidShow(notification: Notification) {
    guard let info = notification.userInfo else { return }
    guard let frameInfo = info[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
    let keyboardFrame = frameInfo.cgRectValue
    print("keyboardFrame: \(keyboardFrame)")
}

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

Geben Sie hier die Bildbeschreibung ein

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

Geben Sie hier die Bildbeschreibung ein

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.


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.

Quelle


135
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


10

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

    var heightKeyboard : CGFloat?

    override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardShown(notification:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
    }

    func keyboardShown(notification: NSNotification) {
           if let infoKey  = notification.userInfo?[UIKeyboardFrameEndUserInfoKey],
               let rawFrame = (infoKey as AnyObject).cgRectValue {
               let keyboardFrame = view.convert(rawFrame, from: nil)
               self.heightKeyboard = keyboardFrame.size.height
               // Now is stored in your heightKeyboard variable
           }
    }

8

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!


0

iPhone

Tastaturgrößen:

  1. 5S, SE, 5, 5C (320 × 568) Tastaturgröße = (0,0, 352,0, 320,0, 216,0) Tastaturgröße = (0,0, 315,0, 320,0, 253,0)

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)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.