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

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

作者: __weak | 来源:发表于2017-09-21 09:40 被阅读42次

-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
//增加通知中心监听,当键盘出现或消失时收出消息
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
}

pragma mark - 视图将要消失

-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.view endEditing:YES];
//删除通知中心监听
[[NSNotificationCenter defaultCenter] removeObserver:self];
}

pragma mark 键盘显示

  • (void)keyboardWillShow:(NSNotification *)notification{

    //获取键盘高度,在不同设备上,以及中英文下是不同的
    CGFloat kbHeight = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;

    //计算出键盘顶端到inputTextView panel底端的距离(加上自定义的缓冲距离130)
    CGFloat offset = (self.breakView.textView.y+self.breakView.textView.height+130) - (self.view.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);
    }];
    }

}

pragma mark 键盘隐藏

  • (void)keyboardWillHide:(NSNotification *)notification {
    // 键盘动画时间
    double duration = [[notification.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];

    //视图下沉恢复原状
    [UIView animateWithDuration:duration animations:^{
    self.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
    }];

}

相关文章

网友评论

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

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