解决iOS键盘输入中文后视图异常

来源:互联网 发布:网络舆情报告模板 编辑:程序博客网 时间:2024/05/01 19:54
1.在- (void)viewDidLoad中监听键盘高度的变换

//监听键盘高度的变换    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];        // 键盘高度变化通知,ios5.0新增的#ifdef __IPHONE_5_0    float version = [[[UIDevice currentDevice] systemVersion] floatValue];    if (version >= 5.0) {        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillChangeFrameNotification object:nil];    }#endif



2.键盘事件响应

其中textInputView为输入框所在View,bubbleTable为消息显示View,480为textInputView与bubbleTable的原始高度之和

-(void) autoMovekeyBoard: (float) h{    textInputView.frame = CGRectMake(0.0f, (float)(480.0 - h - textInputView.frame.size.height), textInputView.frame.size.width, textInputView.frame.size.height); bubbleTable.frame = CGRectMake(0.0f, 0.0f, bubbleTable.frame.size.width, (float)(480.0 - h -textInputView.frame.size.height));}#pragma mark -#pragma mark Responding to keyboard events- (void)keyboardWillShow:(NSNotification *)notification {    [bubbleTable scrollBubbleViewToBottomAnimated:YES];//键盘将要显示,滚动聊天视图到最底部        /*     Reduce the size of the text view so that it's not obscured by the keyboard.     Animate the resize so that it's in sync with the appearance of the keyboard.     */    NSDictionary *userInfo = [notification userInfo];        // Get the origin of the keyboard when it's displayed.    NSValue* aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];        // Get the top of the keyboard as the y coordinate of its origin in self's view's coordinate system. The bottom of the text view's frame should align with the top of the keyboard's final position.    CGRect keyboardRect = [aValue CGRectValue];        // Get the duration of the animation.    NSValue *animationDurationValue = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];    NSTimeInterval animationDuration;    [animationDurationValue getValue:&animationDuration];        // Animate the resize of the text view's frame in sync with the keyboard's appearance.    [self autoMovekeyBoard:keyboardRect.size.height];}- (void)keyboardWillHide:(NSNotification *)notification {    NSDictionary* userInfo = [notification userInfo];    /*     Restore the size of the text view (fill self's view).     Animate the resize so that it's in sync with the disappearance of the keyboard.     */    NSValue *animationDurationValue = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];    NSTimeInterval animationDuration;    [animationDurationValue getValue:&animationDuration];        [self autoMovekeyBoard:0];}