Получение размера iPad экранной клавиатуры после поворота - PullRequest
7 голосов
/ 05 октября 2010

Для приложения, которое я разрабатываю для iPad, у меня есть представление прокрутки с некоторыми текстовыми полями / текстовыми представлениями в нем. Чтобы все было видно, я настраиваю свойство contentSize представления прокрутки, чтобы добавить буфер внизу, который соответствует тому, насколько клавиатура перекрывает представление прокрутки. Вот код (здесь есть некоторые специфичные для приложения вещи, но, надеюсь, не настолько, чтобы вы не могли понять это):

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
    [nc addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}


- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc removeObserver:self name:nil object:nil];
}

- (void)keyboardWillShow:(NSNotification *)aNotification
{
    NSValue *animationCurve = [[aNotification userInfo] valueForKey:UIKeyboardAnimationCurveUserInfoKey];
    UIViewAnimationCurve curve;
    [animationCurve getValue:&curve];

    NSValue *animationDuration = [[aNotification userInfo] valueForKey:UIKeyboardAnimationDurationUserInfoKey];
    NSTimeInterval duration;
    [animationDuration getValue:&duration];

    NSValue *endingFrame = [[aNotification userInfo] valueForKey:UIKeyboardFrameEndUserInfoKey];
    CGRect frame;
    [endingFrame getValue:&frame];

    [UIView beginAnimations:@"keyboardWillShow" context:bodyView];
    [UIView setAnimationCurve:curve];
    [UIView setAnimationDuration:duration]; 

    // Re-draw code here.

    [UIView commitAnimations];
}

- (void)keyboardWillHide:(NSNotification *)aNotification
{

    NSValue *animationCurve = [[aNotification userInfo] valueForKey:UIKeyboardAnimationCurveUserInfoKey];
    UIViewAnimationCurve curve;
    [animationCurve getValue:&curve];

    NSValue *animationDuration = [[aNotification userInfo] valueForKey:UIKeyboardAnimationDurationUserInfoKey];
    NSTimeInterval duration;
    [animationDuration getValue:&duration];

    [UIView beginAnimations:@"keyboardWillHide" context:bodyView];
    [UIView setAnimationCurve:curve];
    [UIView setAnimationDuration:duration];

    // Re-draw code here

    [UIView commitAnimations];      
}

У меня такой вопрос: что мне делать с размером клавиатуры во время вращения? Я не получаю никаких уведомлений от клавиатуры при повороте iPad, но размер клавиатуры значительно меняется. В идеале я бы просто отрегулировал высоту свойства contentSize на величину, которую клавиатура перекрывает в ландшафтном режиме, но я не могу найти хороший способ сделать это без жесткого кодирования высоты клавиатуры в обеих ориентациях, что Я не хочу делать.

1 Ответ

16 голосов
/ 05 октября 2010

Я случайно узнал ответ на эту отладку чего-то еще. Оказывается, когда iPad поворачивается из портретного в альбомный режим, клавиатура портрета прячется (и отправляет свое уведомление) как раз перед тем, как появляется альбомная клавиатура (и отправляет свое уведомление). Так что, пока вы это учитываете, вы в порядке.

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