基本原理:通過獲取鍵盤消息的開始狀態、結束狀態,以及變化周期,可以計算出具體的Y偏移,從而在相同時間裡做相同偏移量。
代碼如下:
- (void)regNotification { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil]; } - (void)unregNotification { [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil]; } #pragma mark - notification handler - (void)keyboardWillChangeFrame:(NSNotification *)notification { NSDictionary *info = [notification userInfo]; CGFloat duration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]; CGRect beginKeyboardRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue]; CGRect endKeyboardRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; CGFloat yOffset = endKeyboardRect.origin.y - beginKeyboardRect.origin.y; CGRect inputFieldRect = self.inputview.frame; inputFieldRect.origin.y += yOffset; [UIView animateWithDuration:duration animations:^{ self.inputview.frame = inputFieldRect; }]; }