Ответ 1
Возможно, вы захотите попробовать рекомендуемый "TPKeyboardAvoidingScrollView", доступный по адресу: https://github.com/michaeltyson/TPKeyboardAvoiding
Работает как шарм...
[Изменить:] Проблема решена. У меня не было моих делегатов, связанных должным образом в UIBuilder
. Код хороший!
Я пытаюсь изменить размер прокрутки, когда появляется клавиатура. Я пошел в документы разработчика и нашел эту информацию.
Слева "Управление клавиатурой".
В документации он показывает немного кода для определения размера клавиатуры, а затем для изменения размера UIScrollView
. Я разместил сообщение NSLog
в коде для функции - (void)keyboardWasShown:(NSNotification*)aNotification
, поэтому я вижу, что функция фактически вызывается, но когда я пытаюсь NSLog
kbSize
.height, она всегда оценивается в 0.
Почему код, который apple для этой цели не работает?
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
// If active text field is hidden by keyboard, scroll it so it visible
// Your application might not need or want this behavior.
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height);
[scrollView setContentOffset:scrollPoint animated:YES];
}
}
Возможно, вы захотите попробовать рекомендуемый "TPKeyboardAvoidingScrollView", доступный по адресу: https://github.com/michaeltyson/TPKeyboardAvoiding
Работает как шарм...
Вы когда-нибудь добавляли наблюдателя для этого конкретного уведомления? Убедитесь, что в вашем методе loadView
вы выполните следующее:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
Не забудьте отменить регистрацию наблюдателя на методе viewDidUnload
следующим образом:
[[NSNotificationCenter defaultCenter] removeObserver:self];
Сообщите мне, если это сработает!
Я делал это несколько раз с UITableView
(это просто расширенный UIScrollView
). Код можно найти в этом ответе.
Одним из простых решений является добавление расширения UIViewController + Keyboard.swift в ваш проект с помощью одной строки
setupKeyboardNotifcationListenerForScrollView(scrollView)
он автоматически изменит размер автоматически при появлении клавиатуры. Не нужно ничего подклассифицировать, просто расширение! Его доступно в GitHub SingleLineKeyboardResize