逻辑就是 要保证在键盘弹出来的时候自定义的View要在键盘的上方,在键盘隐藏的时候自定义的View也隐藏
那么需要监听到键盘的弹出和隐藏
首先呢写两个通知,来分别通知键盘的弹出和隐藏,我们在对其进行更改坐标添加动画等操作
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changetoolBartViewPoint:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeHidenContentViewPoint:) name:UIKeyboardWillHideNotification object:nil];
// 根据键盘状态,调整toolBarView的位置
- (void) changetoolBarViewPoint:(NSNotification *)notification{
NSDictionary *userInfo = [notification userInfo];
NSValue *value = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
CGFloat keyBoardEndY = value.CGRectValue.origin.y; // 得到键盘弹出后的键盘视图所在y坐标
NSNumber *duration = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
NSNumber *curve = [userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey];
// 添加移动动画,使视图跟随键盘移动
[UIView animateWithDuration:duration.doubleValue animations:^{
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationCurve:[curve intValue]];
self.toolBarView.center = CGPointMake(self.toolBarView.center.x, keyBoardEndY - self.toolBarView.bounds.size.height/2.0); // keyBoardEndY的坐标包括了状态栏的高度,要减去
}];
}
-(void)changeHidenContentViewPoint:(NSNotification *)notification{
NSDictionary *userInfo = [notification userInfo];
// NSValue *value = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
// CGFloat keyBoardEndY = value.CGRectValue.origin.y; // 得到键盘弹出后的键盘视图所在y坐标
NSNumber *duration = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
NSNumber *curve = [userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey];
// 添加移动动画,使视图跟随键盘移动
[UIView animateWithDuration:duration.doubleValue animations:^{
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationCurve:[curve intValue]];
// self.toolBarView.center = CGPointMake(0, SCR_H - 44); // keyBoardEndY的坐标包括了状态栏的高度,要减去
self.toolBarView.frame = CGRectMake(0, SCR_H - 44, SCR_W, 44);
}];
}