Wie hoch ist die Bildschirmtastatur des iPhones?

84

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

Erik B.
quelle
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)")
}
Ken Anderson
quelle
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.

Mike Gledhill
quelle
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

Erik B.
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
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:

Geben Sie hier die Bildbeschreibung ein

http://www.idev101.com/code/User_Interface/sizes.html

Philipp Sander
quelle
1
Versionshinweis : Dies ist in iOS 9 und 10 kein Wert mehr, da sie benutzerdefinierte Tastaturgrößen unterstützen.
Raptor
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
           }
    }
torcelly
quelle
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!

Seungyoun Yi
quelle
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)

Tej27
quelle