Qual è l'altezza della tastiera su schermo di iPhone?


84

L'altezza in verticale e l'altezza in orizzontale misurata in punti.


2
Qui puoi trovare tutte le dimensioni di un iPhone: dimensioni iPhone
Pfitz

3
Non utilizzare l'ultimo collegamento "dimensioni iPhone"! È del 2011, prima che arrivasse iOS 8, e consentiva di variare l'altezza della tastiera su schermo.
Mike Gledhill

L'altezza della tastiera su schermo di @MikeGledhill varia anche prima di iOS 8.
ReDetection

Correlati: se stai cercando i valori effettivi delle altezze della tastiera (ad esempio per scopi di debug), vedi Altezze della tastiera in lingua straniera iOS?
Senseful

Risposte:


211

Ho utilizzato il seguente approccio per determinare la cornice della tastiera in iOS 7.1.

Nel metodo init del mio controller di visualizzazione, mi sono registrato per UIKeyboardDidShowNotification:

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

Quindi, ho utilizzato il seguente codice keyboardOnScreen:per accedere alla cornice della tastiera. Questo codice ottiene il userInfodizionario dalla notifica e quindi accede al file NSValueassociato UIKeyboardFrameEndUserInfoKey. È quindi possibile accedere a CGRect e convertirlo nelle coordinate della vista del controller della vista. Da lì, puoi eseguire tutti i calcoli necessari in base a quel frame.

-(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));
 }

Swift

E l'implementazione equivalente con 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
Anche se sembra un po 'complicato, questo è sicuramente meglio che codificare le dimensioni della tastiera. Risposta corretta.
n13

2
Ha votato questa risposta e ha votato negativamente la domanda. OP sicuramente non sa di cosa sta parlando. State attenti ragazzi! Questa risposta è quella corretta!
superarts.org

2
un complemento per Landscape: if (SYSTEM_VERSION_LESS_THAN (@ "8.0")) {_keyboardHeight = keyboardFrame.size.width; } else {_keyboardHeight = keyboardFrame.size.height; }
LiangWang

3
C'è un modo per farlo senza che venga visualizzata la tastiera? Nel mio caso, voglio avere qualcosa dietro la tastiera con la stessa altezza (simile a come i messenger hanno le cose)
John

@ superarts.org Non è necessario votare la domanda; le persone molto probabilmente lo cercheranno e ora vedranno questa risposta .. quindi va tutto bene :)
Ja͢ck

46

Ricorda che, con iOS 8, le dimensioni della tastiera su schermo possono variare. Non dare per scontato che la tastiera su schermo sarà sempre visibile (con un'altezza specifica ) o invisibile.

Ora, con iOS 8, l'utente può anche scorrere l'area di previsione del testo per attivare e disattivare ... e quando lo fa, si avvia di nuovo l'keyboardWillShow evento di un'app .

Questo sarà rompere un sacco di esempi di codice legacy, che ha raccomandato la scrittura di un keyboardWillShowevento, che si limita misura l'altezza attuale della tastiera su schermo, e spostando i controlli verso l'alto o verso il basso sulla pagina di questa quantità (assoluto).

inserisci qui la descrizione dell'immagine

In altre parole, se vedi un codice di esempio, che ti dice semplicemente di aggiungere un keyboardWillShowevento, misurare l'altezza della tastiera, quindi ridimensionare l'altezza dei controlli di questo importo, questo non funzionerà più.

Nel mio esempio sopra, ho usato il codice di esempio dal seguente sito, che anima il constantvalore dei vincoli verticali .

Praticare il layout automatico

Nella mia app, ho aggiunto un vincolo al mio UITextView, impostato nella parte inferiore dello schermo. Quando lo schermo è apparso per la prima volta, ho memorizzato questa distanza verticale iniziale.

Quindi, ogni volta che il mio keyboardWillShowevento viene avviato, aggiungo la (nuova) altezza della tastiera a questo valore del vincolo originale (quindi il vincolo ridimensiona l'altezza del controllo).

inserisci qui la descrizione dell'immagine

Si. È brutto.

E sono un po 'infastidito / sorpreso dal fatto che l'orribile e doloroso AutoLayout di XCode 6 non ci consente solo di collegare la parte inferiore dei controlli alla parte inferiore dello schermo o alla parte superiore della tastiera su schermo.

Forse mi manca qualcosa.

Oltre alla mia sanità mentale.


in realtà, le dimensioni della tastiera variano sempre, anche nelle versioni iOS precedenti. ad esempio, controlla la grafia in lingua cinese
ReDetection

Ops, non me ne rendevo conto. Ho appena trovato strano che così tanti campioni di "keyboardWillShow" presumessero sempre che questo evento sarebbe stato chiamato solo una volta quando la tastiera appariva o scompariva .. senza alcuna funzionalità per far fronte alla tastiera rimanendo sullo schermo, ma cambiando le sue dimensioni.
Mike Gledhill

1
@MikeGledhill Penso che dovrai usare "UIKeyboardWillChangeFrameNotification" per il cambio di frame dovuto alla rotazione o per mostrare (/ nascondere) la barra di previsione del testo ...
Abdalrahman Shatou

L'ho appena testato con la mia app. L'UIKeyboardWillChangeFrameNotification viene sempre chiamato ASWELL AS l'evento keyboardWillShow, ogni volta che faccio apparire la tastiera o attivo o disattivo l'area di previsione del testo. Quindi non aiuta molto. Il punto è ... gli utenti devono stare un po 'attenti a questi eventi, tutto qui.
Mike Gledhill

1
Perché questo non ha molta più attenzione?
rfoo

30

L'altezza della tastiera è 216 punti per la modalità verticale e 162 punti per la modalità orizzontale.

fonte


135
Se hai intenzione di pubblicare domande auto-risposte, almeno dai risposte decenti. La dimensione della tastiera dovrebbe essere ottenuta dall'oggetto di notifica, non un valore hardcoded preso da qualche sito web. Vedi qui
jrturton

16
@jrturton La domanda non è come trovare l'altezza a livello di programmazione. Questa domanda non è utile solo ai programmatori, ma anche ai grafici e simili. La risposta che stai chiedendo appartiene a un'altra domanda. In effetti, c'è un'altra domanda con quella risposta: stackoverflow.com/a/7302291/310121
Erik B

48
@ErikB Stai attento. La dimensione della tastiera dipende dalla lingua e dal tipo di tastiera.
Gabriel

13
Per il tuo bene, non usare MAI il valore hardcoded! Ad esempio, un utente potrebbe utilizzare la tastiera divisa (in due parti), che non si preoccupa molto dell'altezza.
Timo

6
Questa risposta è pigra e pericolosa. Si prega di ottenere l'altezza della tastiera da UIKeyboardDidShowNotification, poiché il valore effettivo tende a cambiare tra le versioni principali di iOS. Vedi la risposta di Ken di seguito.
Alexander


10

L'altezza della tastiera dipende dal modello, dalla barra QuickType, dalle impostazioni dell'utente ... L'approccio migliore è calcolare dinamicamente:

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

Non riesco a trovare l'ultima risposta, quindi controllo tutto con il simulatore. (IOS 11.0)


Dispositivo | Altezza dello schermo | Ritratto | Paesaggio

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 di quinta generazione, iPad Air, iPad Air 2, iPad Pro 9.7, iPad Pro 10.5, iPad Pro 12.9 | 1024.0 | 265.0 | 353.0


Grazie!


0

i phone

Dimensioni della tastiera:

  1. Tastiera 5S, SE, 5, 5C (320 × 568) Dimensioni tastiera = (0,0, 352,0, 320,0, 216,0) Dimensioni tastiera = (0,0, 315,0, 320,0, 253,0)

2.6S, 6,7,8: (375 × 667): keyboardSize = (0.0, 407.0, 375.0, 260.

3,6 +, 6S +, 7+, 8+: tastiera (414 × 736) Dimensioni = (0,0, 465,0, 414,0, 271,0)

4.XS, X: (375 X 812) dimensione della tastiera = (0,0, 477,0, 375,0, 335,0)

5.XR, XSMAX ((414 x 896) dimensioni della tastiera = (0,0, 550,0, 414,0, 346,0)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.