2013-05-28 4 views
0

В моем приложении iOS у меня есть обычный UIScrollView, покрывающий весь экран. Он содержит UIView в верхней части (с некоторыми изображениями заголовков, инструментами и прочими материалами) и далее вниз UIWebView, заполненный некоторым веб-контентом (записи в блогах и комментарии).Как решить, какой UIScrollView прокручивается при показе клавиатуры

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

Так что мой вопрос; как я могу указать код, который scrollview прокручивает, когда отображается клавиатура? Кажется, возвращается к поведению по умолчанию и прокручивает UIWebView, который содержит поля ввода. Вместо этого я хочу прокрутить родителя UIScrollView.

Я попытался установить .scrollEnabled на NO на UIWebView, но это ничего не меняет. У UIWebView не должно быть возможности прокрутки, так как я устанавливаю высоту UIWebView (а также .contentSize основного UIScrollView) на высоту своего содержимого при каждом посещении веб-представления.

Как я могу это достичь? Или мне нужно сделать прокрутку вручную?

ответ

2

Вы должны зарегистрироваться для уведомления о клавиатуре, я не знаю, устранит проблему, но загляните сюда: Apple doc about keyboard.
Таким образом, вы сможете прокручивать прокрутку с помощью клавиатуры на экране, но я думаю, что веб-просмотр также ответит, так как он уже зарегистрирован для уведомления о клавиатуре, возможно, вы также можете перепрограммировать его при прослушивании такого уведомления.

+0

Да, вы привели меня в правильном направлении. Я повторно просмотрел веб-представление в scrollviewDidScroll, а затем выполнил некоторые вычисления и программно прокрутил прокрутку. Благодарим за руководство. – stafffan

0

Не прокручивайте содержание, чтобы перемещать содержимое вверх. Либо сделайте одну из двух вещей: -

1: поместите все содержимое в вид контейнера и используйте анимации UIView, чтобы переместить все. Вот что я делаю.

Или

2: Положите все в отдельном Scrollview и использовать [scrollView setContentOffset:offset animated:YES];, чтобы переместить его вверх. Хотя, честно говоря, это старый подход, и я бы не рекомендовал его

Это имеет смысл?

0

Просто для информации

Из документации Apple:

Важно: Вы не должны вставлять UIWebView или UITableView объекты в объектов UIScrollView. Если вы это сделаете, неожиданное поведение может привести к , потому что события касания для двух объектов могут быть перемешаны и ошибочно обработаны .

+0

Да, я знаю об этом предупреждении. Но поскольку я отключил прокрутку в UIWebView, все должно быть хорошо. По крайней мере, насколько я вижу? http://stackoverflow.com/questions/12868999/why-shouldnt-a-uiwebview-be-placed-in-a-uiscrollview – stafffan

Смежные вопросы