多次触发时,我的软键盘上的高度会发生变化

The height on my soft keyboard changes when triggered multiple times

我有一个观察到的方法,它会在显示 soft keyboard 时触发。它工作正常,但由于某种原因 soft keyboardheight 在隐藏后发生变化,然后第二次显示。我找不到原因,而且 hide-delegate 中似乎没有任何东西可以改变它的值。是什么原因造成的?我已经通过存储高度然后第二次使用它解决了这个问题,但我想知道这个问题的原因。

- (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];

    CGSize keyboardSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    CGRect visibleRect = self.view.frame;

    if (_storedKeyboardHeight.size.height == 0) {
        _storedKeyboardHeight.size.height = keyboardSize.height;
    }

    visibleRect.size.height = _storedKeyboardHeight.size.height;
    visibleRect.origin.y = self.view.height - visibleRect.size.height;

    CGRect rectOfCellInTableView = [self.loginTableView rectForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]];

    //This changes the second time
    NSLog(@" %f", keyboardSize.height);
    //so I store the original value here
    NSLog(@" %@", CGRectCreateDictionaryRepresentation(_storedKeyboardHeight));

    if ((rectOfCellInTableView.origin.y + rectOfCellInTableView.size.height) > visibleRect.origin.y){
        CGPoint scrollPoint = CGPointMake(0.0, (rectOfCellInTableView.origin.y + rectOfCellInTableView.size.height) - visibleRect.origin.y + 50);
        [self.loginTableView setContentOffset:scrollPoint animated:YES];
    }
}

第一次身高291,第二次身高233。

问题是您正在检查错误的框架:

UIKeyboardFrameBeginUserInfoKey

显示键盘时,在显示过程开始它的frame height是多少,你没兴趣。你想知道的是显示过程结束的帧:

UIKeyboardFrameEndUserInfoKey

此外,您收到的通知似乎有误。您没有显示您注册的是什么通知,但是您的方法名称 keyboardWasShown 表明您在键盘 did 显示时收到通知。那太晚了;此通知几乎从不引起任何兴趣。您想知道键盘 何时会 显示。