2014-09-23 21 views
7

Bir klavye gösterildiğinde bazı konum ayarlarına ihtiyaç duyan bir kullanıcı arayüzüne sahibim.iOS8 UIKeyboardWillShowNotification Üçüncü taraf klavye yüksekliği

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardWillShow:) 
              name:UIKeyboardWillShowNotification 
              object:nil]; 

Not: Bir klavye gösterildiğinde

aşağıdaki

algılamak için kullanılır Ben UIKeyboardWillShowNotification ve UIKeyboardDidShowNotification hem denedim

özel İçin
- (void)keyboardWillShow:(NSNotification *)n { 
    if (isKeyboardShowing) 
    return; 

NSDictionary* userInfo = [n userInfo]; 

// get the size of the keyboard 
CGSize keyboardSize = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 


// Animate keyboard shift 
[self.view layoutIfNeeded]; 

[UIView animateWithDuration:0.2f animations:^{ 
    // some animation here 
} completion:^(BOOL finished) { 
    if (finished) 
     isKeyboardShowing = YES; 
}]; 

klavye boyutu döner klavyeler {320 , 0}. Artık klavyeler farklı yüksekliklere sahip olabileceğinden, klavye sunulduğunda kullanıcı arayüzünü değiştirmek için statik değerlere sahip olamıyorum.

ios8 ile ilgili bir sorun mu var? ve klavye yüksekliğini dinamik olarak almak için başka yöntemler var mı?

Düzenleme: Önceden

{name = UIKeyboardDidShowNotification; userInfo = { 
    UIKeyboardAnimationCurveUserInfoKey = 7; 
    UIKeyboardAnimationDurationUserInfoKey = "0.25"; 
    UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {320, 0}}"; 
    UIKeyboardCenterBeginUserInfoKey = "NSPoint: {160, 568}"; 
    UIKeyboardCenterEndUserInfoKey = "NSPoint: {160, 568}"; 
    UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 568}, {320, 0}}"; 
    UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 568}, {320, 0}}"; 
}} 

Teşekkür: Bu userinfo Dict olduğunu.

cevap

11

Kullanım

CGSize keyboardSize = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size; 

klavyenin gerçek boyutunu almak için