我有一条像聊天窗口这样的消息。当键盘显示时,我会按下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;
}];
}
答案 0 :(得分:2)
您正在使用UIKeyboardFrameBeginUserInfoKey
,为了让您的代码有效,您应该使用UIKeyboardFrameEndUserInfoKey
UIKeyboardFrameBeginUserInfoKey NSValue对象的键 包含一个CGRect,用于标识键盘的起始帧 屏幕坐标。这些坐标不考虑任何 旋转因子作为结果应用于窗口的内容 界面方向变化。因此,您可能需要转换 矩形到窗口坐标(使用convertRect:fromWindow: 方法)或查看坐标(使用convertRect:fromView: 方法)在使用之前。
UIKeyboardFrameEndUserInfoKey包含NSValue对象的键 一个CGRect,用于标识屏幕中键盘的结束帧 坐标。这些坐标不考虑任何旋转 因界面而应用于窗口内容的因子 方向变化。因此,您可能需要将矩形转换为 窗口坐标(使用convertRect:fromWindow:方法)或 使用前查看坐标(使用convertRect:fromView:方法) 它