it-swarm.com.ru

Переместите UIScrollView, когда клавиатура встанет на место

[Править:] Проблема была решена. У меня не было своих делегатов, связанных должным образом в UIBuilder. Код это хорошо!

Я пытаюсь изменить размер прокрутки при появлении клавиатуры. Я пошел к разработчикам документации и нашел эту информацию.

http://developer.Apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html#//Apple_ref/doc/uid/TP40009542-CH5-SW1

Слева «Управление клавиатурой».

В документации он показывает немного кода, чтобы определить размер клавиатуры и затем изменить размер UIScrollView. Я поместил сообщение NSLog в код для функции - (void)keyboardWasShown:(NSNotification*)aNotification, так что я вижу, что функция на самом деле вызывается, но когда я пытаюсь NSLog высоту kbSize. Она всегда оценивается в 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's 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];
    }
}
15
thenetimp

Вы можете попробовать настоятельно рекомендованный «TPKeyboardAvoidingScrollView», доступный по адресу: https://github.com/michaeltyson/TPKeyboardAvoiding

Работает как шарм ...

33
Reuven

Вы когда-нибудь добавляли наблюдателя для этого конкретного уведомления? Убедитесь, что в вашем методе loadView вы делаете это:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];

Не забудьте отменить регистрацию метода viewDidUnload следующим образом:

[[NSNotificationCenter defaultCenter] removeObserver:self];

Дайте мне знать, если это сработает!

3
Mihai Fratu

Одним из простых решений является добавление расширения UIViewController + Keyboard.Swift в ваш проект с помощью одной строки. 

setupKeyboardNotifcationListenerForScrollView(scrollView)

он автоматически изменит размер при появлении клавиатуры. Нет необходимости создавать подклассы, просто расширение! Его можно найти на GitHub SingleLineKeyboardResize

0
bogen

Я делал это несколько раз с UITableView (это просто расширенная UIScrollView). Вы можете найти код в этом ответе

0
DBD