Синхронно сдвиньте UIView вверх и измените размер UITableView при запуске UITextField - PullRequest
2 голосов
/ 05 февраля 2012

Я бы изменил размер UITableView и сдвинул вверх UIView, который содержит UITextField при запуске этого поля. Это два простых макета:

enter image description here enter image description here

Теперь у меня есть этот код:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationBeginsFromCurrentState:YES];

    [myView setFrame:CGRectMake(myView.frame.origin.x, myView.frame.origin.y - 167, myView.frame.size.width, myView.frame.size.height)]; // 216 (keyboard's height) - 49 (tabbar's height) = 167

    [UIView commitAnimations];
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationBeginsFromCurrentState:YES];

    [myView setFrame:CGRectMake(myView.frame.origin.x, myView.frame.origin.y + 167, myView.frame.size.width, myView.frame.size.height)];

    [UIView commitAnimations];
    return TRUE;
}

Проблема в том, что анимация скольжения клавиатуры и анимация скольжения myView не являются синхронными. Как сделать эти две анимации совершенно синхронными?

А как изменить размер UITableView, когда клавиатура видна, и вернуть исходную высоту, когда клавиатура будет скрыта?

1 Ответ

3 голосов
/ 05 февраля 2012

Короткий ответ: вам нужно подписаться на UIKeyboardWillShowNotification и UIKeyboardWillHideNotification. Эти уведомления содержат точные параметры анимации клавиатуры.

Длинный ответ: https://stackoverflow.com/a/8704371/77567.

Относительно вашей панели вкладок: ответ, который я связал, предполагает, что вы хотите сдвинуть свой взгляд к нижнему краю экрана, когда клавиатура отклонена Поскольку вы хотите сдвинуть его к краю панели вкладок, вам нужно посмотреть, скрывает ли клавиатура или показывает (отметив note.name). Если он отображается, вы должны сохранить текущий кадр представления в переменной экземпляра. Если он скрыт, вы должны установить новый кадр представления в тот кадр, который вы сохранили в переменной экземпляра, вместо того, чтобы устанавливать его на основе конечного кадра клавиатуры.

...