Переместите UIScrollView, когда клавиатура встанет на место - PullRequest
15 голосов
/ 21 декабря 2011

[Редактировать:] Проблема была решена.У меня не было своих делегатов, связанных должным образом в 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 .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'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];
    }
}

Ответы [ 4 ]

33 голосов
/ 21 декабря 2011

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

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

3 голосов
/ 21 декабря 2011

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

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

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

[[NSNotificationCenter defaultCenter] removeObserver:self];

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

0 голосов
/ 21 февраля 2015

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

setupKeyboardNotifcationListenerForScrollView(scrollView)

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

0 голосов
/ 21 декабря 2011

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

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