UIWebView scrollTo препятствует возврату наверх - PullRequest
2 голосов
/ 13 сентября 2011

У меня есть ViewController с UIWebView в проекте Objective-c для iPad. Когда я добавляю html (с loadHtmlString), я пытаюсь сохранить позицию прокрутки, которая была до loadHtml, но я не могу помочь, и она возвращается наверх. Вот строки, которые я использую:

scrollPosition = [[webView stringByEvaluatingJavaScriptFromString: @"scrollY"] intValue];
[webView loadHTMLString:html baseURL:nil];
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.scrollTo(0, %d);",scrollPosition]];

Я проверил значение scrollY в разных местах моего кода и он остается на значении scrollPosition, которое я хочу, но когда он в конечном итоге отображается на экране, WebView всегда вверху (со значением scrollY затем 0). Есть ли кто-нибудь, кто мог бы помочь мне понять, почему это происходит?

Я часами проверял ответы онлайн, в том числе и в StackOverflow. Я пробовал разные решения (например, добавление в моем веб-просмотре JavaScript "onclick =" scroll (); return false; ", но безрезультатно. Я попытался самостоятельно делегировать webView и обновить scrollTo в webViewDidFinishLoad, но кажется, что webViewDidFinishLoad не вызывается (точка останова не достигнута), хотя я добавил в .h в интерфейсе и в .m в ViewDidLoad строку: webView.delegate = я;

Заранее благодарю за любую помощь.

1 Ответ

3 голосов
/ 14 сентября 2011

Я понял, что после перекомпиляции, webViewDidFinishLoad был вызван после обновления HTML, и что я мог затем прокрутить до правильной позиции.Для самостоятельного делегирования, которое я использовал в viewDidLoad, это выглядит так:

webview.delegate = self;

Перед обновлением HTML в веб-представлении я рассчитываю позицию прокрутки с помощью кода:

        scrollPosition = [[wbView stringByEvaluatingJavaScriptFromString: @"scrollY"] intValue];

Затем длявозвращаясь к этой позиции, как только в webView появился обновленный html, я затем использую:

-(void) webViewDidFinishLoad:(UIWebView *)wbView {
[wbView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.scrollTo(0, %d);",scrollPosition]];
}

Я нашел часть решения в посте ниже с ответом Павла: Как мне прокрутитьпрограммно до дна в uiwebview

...