平时项目中会遇到输入框在输入文字时,键盘弹出后遮挡输入框看不见输入的内容,影响交互效果,需要将输入框随着键盘的高度上移,以达到更好地交互效果,具体实现如下。
1、监听键盘frame变化
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrameNotification:) name:UIKeyboardWillChangeFrameNotification object:nil];
2、实现通知方法
- (void)keyboardWillChangeFrameNotification:(NSNotification*)notification {
CGFloat duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
CGRect keyboardFrame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGFloat transformY = self.frame.size.height - keyboardFrame.origin.y;
[UIView animateWithDuration:duration animations:^{
[self.contentView mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.mas_bottom).offset(-ContentViewHeight-transformY);
}];
[self layoutIfNeeded]; // 自动布局的view改变约束后,需要强制布局才能出动画效果
}];
}
说明:
①、self.contentView 是输入框textView或者textfield所在的父view;
②、页面使用masonry布局,self.contentView约束改变后需要self.contentView的父view(也就是self)执行[self layoutIfNeeded];出动画效果。
3、键盘隐藏后如果还需要做别的处理,可以监听键盘隐藏的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeHidden:) name:UIKeyboardWillHideNotification object:nil];
4、然后实现键盘隐藏后的通知方法
- (void)keyboardWillBeHidden:(NSNotification *)notification {
//键盘消失后的处理
}
5、注销通知
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}