Задайте содержимое UIWebView не для перемещения, когда отображается клавиатура
Я провел достаточно много исследований, но не смог найти ответ на мой вопрос.
Предположим, что у меня есть webView
, в котором у меня есть текстовые поля, некоторые из них помещены в нижней части экрана, так что, когда клавиатура появляется, она должна скрывать эти поля. После появления клавиатуры содержимое webView
соскальзывает, чтобы сделать эти поля видимыми. Проблема в том, что я НЕ хочу хочу, чтобы контент скользил вверх.
Вопрос: как отключить эту функцию webView
или каким-то образом сделать контент не прокруткой вверх.???
Спасибо, любая помощь будет оценена.
Ответы
Ответ 1
Если вы хотите отключить ВСЕ прокрутку, включая автоматическую прокрутку, когда вы перемещаетесь между полями формы, установка webView.scrollView.scrollEnabled=NO
не совсем охватывает все. Это останавливает обычную прокрутку прокрутки и перетаскивания, но не автоматическую прокрутку в полевых условиях при навигации по веб-форме.
Кроме того, просмотр UIKeyboardWillShowNotification
позволит вам предотвратить прокрутку при появлении клавиатуры, но это ничего не сделает, если клавиатура уже работает с редактированием другого поля формы.
Здесь, как предотвратить ВСЕ прокрутку в три простых шага:
1) После создания UIWebView отключите обычную прокрутку:
myWebView.scrollView.scrollEnabled = NO;
2) Затем зарегистрируйте контроллер вида в качестве делегата scrollView:
myWebView.scrollView.delegate = self;
(И не забудьте добавить <UIScrollViewDelegate>
в определение класса @interface
для предотвращения предупреждений компилятора)
3) Захват и отмена всех событий прокрутки:
// UIScrollViewDelegate method
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
scrollView.bounds = myWebView.bounds;
}
Ответ 2
Я думаю, этот класс должен помочь с вашей проблемой. Он прокручивает содержимое вверх, поэтому, если у вас есть текстовое поле в нижней части экрана, оно будет перемещаться над клавиатурой.
Ответ 3
Я нашел решение для меня. Я просто прокручиваю его снова после прокрутки.
Сначала я узнаю уведомление UIKeyboardWillShowNotification
, добавив к нему наблюдателя
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
затем реализуем метод:
-(void)keyboardWillShow:(NSNotification*)aNotification{
NSDictionary* info = [aNotification userInfo];
float kbHeight = [[NSNumber numberWithFloat:[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size.height]floatValue];
float kbWidth = [[NSNumber numberWithFloat:[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size.width]floatValue];
BOOL keyboardIsVisible=[self UIKeyboardIsVisible];
//Check orientation and scroll down webview content by keyboard size
if(kbWidth==[UIScreen mainScreen].bounds.size.width){
if (!keyboardIsVisible) {
[[chatView scrollView] setContentOffset:CGPointMake(0, -kbHeight+10) animated:YES];
} //If is landscape content scroll up is about 113 px so need to scroll down by 113
}else if (kbHeight==[UIScreen mainScreen].bounds.size.height){
if (!keyboardIsVisible) {
[[chatView scrollView] setContentOffset:CGPointMake(0, -113) animated:YES];
}
}
}
Это не то, что я точно спросил, но помог мне решить мою проблему.
Спасибо.
Ответ 4
Первоначально я пытался остановить увеличение моего веб-просмотра, когда фокусировалось поле ввода (в моем случае это раздел комментариев). Весь вид увеличится автоматически и выкинет все из строя. Мне удалось сделать это с этим, и в то же время я получил веб-представление, чтобы перестать прокручивать вверх и в сторону софт-клавиатуры:
//Stop the webview from zooming in when the comments section is used.
UIScrollView *scrollView = [_webView.subviews objectAtIndex:0];
scrollView.delegate = self;
//_webView.scrollView.delegate = self; //for versions newer than iOS5.