2012-04-17 3 views
1

Я пробовал несколько реализаций вида прокрутки, чтобы обрабатывать присутствие клавиатуры, в том числе собственный. Я не могу заставить их работать.UIScrollView требуется только при отображении клавиатуры

У меня есть представление, которое не требует прокрутки, когда клавиатура не отображается, но как только текстовое поле является первым ответчиком, а на клавиатуре отображается некоторый контент, нужно прокручивать.

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

Это так близко, как я могу получить:

Я могу успешно зарегистрироваться для получения уведомлений клавиатуры. При загрузке я устанавливаю свой scrollview и размер контента на всю высоту представления. Когда клавиатура отображается, изменить размер Scrollview к первоначальной высоте минус высота клавиатуры:

scrollView.frame = CGRectMake(0, 0, 320, 416 - kbSize.height); 

А скрывать, я просто сбросить его:

scrollView.frame = CGRectMake(0, 0, 320, 416); 

Это почти работает. Кроме того, как только клавиатура будет отображаться, если я прокручу вниз до нижней части представления (сохраняя отображаемую клавиатуру), а затем спрячу клавиатуру с помощью клавиши возврата, когда изменяется вид прокрутки, появляется неэлегантный «прыжок» вверх экрана. Для изменения размера прокрутки нет гладкой анимированной прокрутки.

Любые идеи? Я думаю, что я взламываю это по сравнению с реализацией Apple, но это самое близкое, что у меня есть.

+0

Попробуйте поместить ваш кадр размер в анимации блока ? –

ответ

0

Да, как Джастин Полсон прокомментировал, но вот код

[UIView animateWithDuration:0.3 animations:^{ 
     self.scrollView.frame = newFrame; 
}]; 
+0

Это приводит к тому, что представление переходит в прокрутку вниз до того, как оно вернется к правильному размеру. –

0

Я думаю, вы можете просто исправить положение прокрутки перед смещать:

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField { 

    // like this: 
    self.contentOffset = CGPointMake(0,0); 

    // you can animate the frame change here, or where you were doing it 
    [UIView animateWithDuration:0.2 animations:^{ 
     scrollView.frame = CGRectMake(0, 0, 320, 416); 
    }]; 
    return YES; 
} 
Смежные вопросы