Я понимаю, что существует много подобных решений, таких как TPKeyboardAvoiding, Apple's famous solution и различные предложения, связанные с использованием UIScrollView. В моем случае мне нужно изменить размер представления, чтобы разместить клавиатуру, а не прокручивать или перемещать ее. This solution подходит ближе всего к тому, чего я пытаюсь достичь, поэтому это была моя основа. Однако у меня проблема, в которой все работает в ландшафтном режиме. Мой метод, который изменяет размер представления при появлении этой клавиатуры:Изменение размера представления при появлении клавиатуры (iOS)
- (void)keyboardWillShow:(NSNotification *)note {
NSDictionary *userInfo = note.userInfo;
NSTimeInterval duration = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
UIViewAnimationCurve curve = [[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue];
CGRect keyboardFrame = [[self textField].superview convertRect:[[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue] fromView:nil];
CGRect statusBarFrame = [[self textField].superview convertRect:[UIApplication sharedApplication].statusBarFrame fromView:nil];
CGRect bounds = [self textField].superview.bounds;
CGRect newFrame = CGRectMake(0.0, 0.0, bounds.size.width, keyboardFrame.origin.y + statusBarFrame.size.height);
[UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionBeginFromCurrentState | curve animations:^{
[self textField].superview.frame = newFrame;
} completion:nil];
}
Это прекрасно работает в портретном режиме.
Однако в ландшафтном режиме, вид изменяет размеры слева направо или справа налево в зависимости от того, в каком направлении было повернуто устройство, а не снизу вверх.
Очевидно, что что-то не так с тем, как я использую координаты, а некоторые системы отсчета не то, что я думаю, что это когда в ландшафтном режиме, но у меня чертовски времени как решить проблему. Я пробовал конвертировать всевозможные вещи с помощью -convertRect: но ничто из того, что я пытаюсь, не приводит меня нигде.
Я действительно надеюсь, что кто-то, кто менее смущен всеми этими прямоугольниками и как они меняются, когда изменения ориентации могут определить, что я делаю неправильно, и что мне нужно сделать, чтобы это исправить. Для справки, у меня есть created a project, где показан самый простой случай, который воспроизводит проблему, которую я испытываю.
Вы хотите повернуть iPan, когда клавиатура видна? –
В идеале, да, поскольку я уверен, что некоторые пользователи сделают это. Но я думаю, что если я смогу заставить это решение работать (я добавляю метод, когда клавиатура скрыта, чтобы снова изменить размер резервной копии), которая будет работать автоматически. Я верю, что когда устройство поворачивается с показанной на клавиатуре, iOS последовательно отправляет уведомления о клавиатуреWillHide и keyboardWillShow. – bkocik
Спасибо за код анимации, очень удобно. – phatmann