Обработка отображения / скрытия и изменения ориентации клавиатуры - PullRequest
0 голосов
/ 04 марта 2011

Я использую следующий метод для изменения размера представления после отображения / скрытия клавиатуры:

- (void)moveViewForKeyboard:(NSNotification*)aNotification up:(BOOL)up {

   NSDictionary* userInfo = [aNotification userInfo];

   // Get animation info from userInfo
   NSTimeInterval animationDuration;
   UIViewAnimationCurve animationCurve;
   CGRect keyboardEndFrame;
   [[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&animationCurve];
   [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&animationDuration];
   [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardEndFrame];

   // Animate up or down
   [UIView beginAnimations:nil context:nil];
   [UIView setAnimationDuration:animationDuration];
   [UIView setAnimationCurve:animationCurve];

   CGRect newFrame = self.view.frame;
   CGRect keyboardFrame = [self.view convertRect:keyboardEndFrame toView:nil];

   newFrame.size.height += (up? -1 : 1) * keyboardFrame.size.height;

   self.view.frame = newFrame;

   keyboardUp = up;

   [UIView commitAnimations];
}

Это работает очень хорошо, пока ориентация экрана не изменится. Затем происходит то, что метод корректно изменяет размер представления, но после того, как этот метод возвращается - что-то еще снова изменяет размер представления до максимальной высоты экрана.

Есть идеи?

1 Ответ

0 голосов
/ 04 марта 2011

Сначала вам нужно выяснить, что снова изменяет размер представления. Я бы порекомендовал поместить точку останова в вышеуказанный метод, чтобы при вызове второго нежелательного времени вы могли посмотреть на стек вызовов методов и посмотреть, что вызывает второй вызов. Тогда вы сможете остановить его или изменить код, чтобы он не вызывал проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...