iOS 8键盘 - 显示键盘时向上推UITextField的问题

时间:2014-09-25 02:21:24

标签: ios objective-c iphone ios8

我有一条像聊天窗口这样的消息。当键盘显示时,我会按下UITextField,使其显示在键盘正上方。在iOS 7中,它运行良好,但它在iOS 8上不起作用。这是我的代码

// Detect the keyboard events

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

// Listen to keyboard shown/hidden event and resize. 

- (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    [UIView animateWithDuration:0.2f animations:^{

        CGRect frame = self.textInputView.frame;
        frame.origin.y -= kbSize.height;
        self.textInputView.frame = frame;

        frame = self.myTableView.frame;
        frame.size.height -= kbSize.height;
        self.myTableView.frame = frame;
    }];
    [self scrollToTheBottom:NO];
}


- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
     NSDictionary* info = [aNotification userInfo];
     CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    [UIView animateWithDuration:0.2f animations:^{

        CGRect frame = self.textInputView.frame;
        frame.origin.y += kbSize.height;
        self.textInputView.frame = frame;

        frame = self.myTableView.frame;
        frame.size.height += kbSize.height;
        self.myTableView.frame = frame;
    }];
}

1 个答案:

答案 0 :(得分:2)

您正在使用UIKeyboardFrameBeginUserInfoKey,为了让您的代码有效,您应该使用UIKeyboardFrameEndUserInfoKey

  

UIKeyboardFrameBeginUserInfoKey NSValue对象的键   包含一个CGRect,用于标识键盘的起始帧   屏幕坐标。这些坐标不考虑任何   旋转因子作为结果应用于窗口的内容   界面方向变化。因此,您可能需要转换   矩形到窗口坐标(使用convertRect:fromWindow:   方法)或查看坐标(使用convertRect:fromView:   方法)在使用之前。

     

UIKeyboardFrameEndUserInfoKey包含NSValue对象的键   一个CGRect,用于标识屏幕中键盘的结束帧   坐标。这些坐标不考虑任何旋转   因界面而应用于窗口内容的因子   方向变化。因此,您可能需要将矩形转换为   窗口坐标(使用convertRect:fromWindow:方法)或   使用前查看坐标(使用convertRect:fromView:方法)   它