美文网首页iOSiOS文章
iOS-当输入框被键盘遮挡时让整个view上移

iOS-当输入框被键盘遮挡时让整个view上移

作者: 奋斗的蜗牛 | 来源:发表于2016-11-02 15:33 被阅读6517次
  • 注册键盘通知
#pragma mark - 键盘通知
- (void)addNoticeForKeyboard {
    
    //注册键盘出现的通知
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillShow:)
                                                 name:UIKeyboardWillShowNotification object:nil];
    //注册键盘消失的通知
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillHide:)
                                                 name:UIKeyboardWillHideNotification object:nil];
}
  • 键盘代理事件
///键盘显示事件
- (void) keyboardWillShow:(NSNotification *)notification {
    //获取键盘高度,在不同设备上,以及中英文下是不同的
    CGFloat kbHeight = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;
 
    //计算出键盘顶端到inputTextView panel底端的距离(加上自定义的缓冲距离INTERVAL_KEYBOARD)
    CGFloat offset = (textView.frame.origin.y+textView.frame.size.height+INTERVAL_KEYBOARD) - (self.view.frame.size.height - kbHeight);
     
    // 取得键盘的动画时间,这样可以在视图上移的时候更连贯
    double duration = [[notification.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
     
    //将视图上移计算好的偏移
    if(offset > 0) {
        [UIView animateWithDuration:duration animations:^{
            self.view.frame = CGRectMake(0.0f, -offset, self.view.frame.size.width, self.view.frame.size.height);
        }];
    }
}
 
///键盘消失事件
- (void) keyboardWillHide:(NSNotification *)notify {
    // 键盘动画时间
    double duration = [[notify.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
     
    //视图下沉恢复原状
    [UIView animateWithDuration:duration animations:^{
        self.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
    }];
}

相关文章

网友评论

  • 睿少:这样写不管有没有覆盖到控件都会上移啊。。。
  • 可惜你不是我的双子座:写的不错 用上了 谢谢
  • f367c38c26f7:做屏幕适配的时候会有问题,如果说用户用的不是系统的输入法键盘好像也有点问题
  • 繁华三千_泰然独处:请问自定义的缓冲距离INTERVAL_KEYBOARD是什么意思?
    奋斗的蜗牛:inputTextView 距离键盘的距离,这个距离自己调,这个距离是为了,如果inputTextView在最底部的情况,不至于键盘弹出紧贴着。
  • 青空逸隐:用的上,赞个

本文标题:iOS-当输入框被键盘遮挡时让整个view上移

本文链接:https://www.haomeiwen.com/subject/ruivuttx.html