Итак, вы были удалены как наблюдатель до того, как была опубликована UIKeyboardDidHideNotification
, рад, что я мог помочь. Но наблюдения UIKeyboardWillHideNotification
и UIKeyboardWillShowNotification
, вероятно, достаточно для вашей реакции на клавиатуру. Уведомления клавиатуры имеют пользовательскую информационную клавишу UIKeyboardAnimationDurationUserInfoKey
, которую можно использовать для анимации настроек кадра с помощью анимации клавиатуры. Это позволяет избежать ощущения «чепухи», которое возникнет у ваших взглядов, если вы не оживите их на новых позициях. Вот быстрый пример того, что вы можете сделать:
-(void)keyboardWillNotificationTarget:(NSNotification *)note{
// Find current keyboard origin Y
NSValue *keyboardCurrentFrameValue = [note.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey];
CGFloat currentOriginY = keyboardCurrentFrameValue.CGRectValue.origin.y;
// Find keyboard Y that will be
NSValue *keyboardNewFrameValue = [note.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
CGFloat newOriginY = keyboardNewFrameValue.CGRectValue.origin.y;
// Calculate new frame for scrollView
CGFloat heightChangeForScrollView = newOriginY - currentOriginY;
CGRect svFrame = scrollView.frame;
svFrame.size.height += heightChangeForScrollView;
// Find duration of animation
NSNumber *animationDurationNumber = [note.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
CGFloat animationDuration = animationDurationNumber.floatValue;
// Animate scrollView with keyboard
[UIView animateWithDuration:animationDuration animations:^{
scrollView.frame = svFrame;
}];
}
Теперь вы просто добавляете этот метод в качестве цели для обоих уведомлений:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillNotificationTarget:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillNotificationTarget:) name:UIKeyboardWillHideNotification object:nil];