2012-07-15 16 views
9

su iPad, dopo la sottoscrizione di UIKeyboardDidShowNotificationdimensioni della tastiera che restituiscono valori errati?

NSDictionary* info = [aNotification userInfo]; 
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 
NSLog(@"%@", NSStringFromCGSize(kbSize)); 

stampe {352, 1024}

Non è questo che non va? Non solo l'altezza della tastiera è così grande, come può l'altezza essere più larga della larghezza? O mi manchi qualcosa?

risposta

40

Scommetto che le dimensioni sono riportate in un orientamento statico (l'orientamento della 'finestra' non cambia mai), quindi suggerisco di tradurlo nella visualizzazione di interesse. Il mio trucco normale è quello di convertirlo in spazio di coordinate di vista della finestra del RootViewController:

CGRect rawKeyboardRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue]; 
CGRect properlyRotatedCoords = [self.view.window convertRect:rawKeyboardRect toView:self.view.window.rootViewController.view]; 

O una visione più appropriata se si dispone di uno disponibile. La chiave è che tutte le coordinate riportate nello spazio delle coordinate della finestra non vengono ruotate, anche se la vista di rootVC della finestra è.

+0

Impressionante, grazie! – 0xSina

+0

solo 1 su votare su questo? Bam, ora hai 2, grazie! –

+0

Grazie, ti meriti questo up-voto! – Mausimo

Problemi correlati