通过NSNotificationCenter给出的键盘尺寸(keyboard size given

2019-07-30 05:31发布

我想从一个一个UISearchBar称为键盘上添加accessoryView的。 由于的UISearchBar没有实现这个属性,我刚刚创建了一个工具栏。 继苹果公司的文档就不管了,我已经决定使用通知中心不仅要知道当键盘被调用,但也知道键盘,它的变化取决于方向的尺寸。

我已经按照文件上的例子,并在keyboardWasShown方法,我称之为动画,它会显示在键盘的顶部的工具栏。 事情是这样的:

-(void)keyboardWasShown:(NSNotification*)aNotification {

    NSDictionary *info=[aNotification userInfo];
    CGSize keyboardSize=[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

     NSLog(@"width: %.1f; height: %.1f", keyboardSize.width, keyboardSize.height );

    [self showAccessoryView:keyboardSize.height];
}

并且,在动画我这样设置工具栏的框架:

 self.auxiliaryKeyboardBar.frame=CGRectMake(0, self.view.frame.size.height-(44+kbh), self.view.frame.size.width, 44);

其中图44是在工具栏的静态高度和KBH从以上方法通过keyboard.size.heigth。

我观察到的问题是,由给定的键盘尺寸userInfo字典总是refered到纵向。 因此,在纵向的NSLog的是:

width: 320.0; heigth: 216.0 width: 320.0; heigth: 216.0 ,这是确定

但是当我改变方向为横向和我所说的键盘时,的NSLog如下:

width: 162.0; heigth: 480.0 width: 162.0; heigth: 480.0 ,这使工具栏超出范围。

所以,我最终调用动画,如在此之前增加一个条件:

if ([self deviceIsPortrait]==YES) {
        [self showAccessoryView:keyboardSize.height];
    }else if ([self deviceIsPortrait]==NO) {
        [self showAccessoryView:keyboardSize.width];
    }

我现在想知道是否我做错了什么,因为我下面的苹果的例子正是为了避免对键盘高度依赖(float类型),我最后不得不添加条件一个方向反正。

这里发生了什么?

Answer 1:

我想你错过了是这样的:

CGRect keyboardFrameConverted = [mainSubviewOfWindow convertRect:keyboardFrame fromView:window];

这是一个有点断章取义,所以这里是全面实施:

- (void) keyboardDidShow:(NSNotification*)notification {
    CGRect keyboardFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    NSLog(@"keyboard frame raw %@", NSStringFromCGRect(keyboardFrame));

    UIWindow *window = [[[UIApplication sharedApplication] windows]objectAtIndex:0];
    UIView *mainSubviewOfWindow = window.rootViewController.view;
    CGRect keyboardFrameConverted = [mainSubviewOfWindow convertRect:keyboardFrame fromView:window];
    NSLog(@"keyboard frame converted %@", NSStringFromCGRect(keyboardFrameConverted));
}


文章来源: keyboard size given by NSNotificationCenter