window.scrollto JavaScript вызов неправильного поведения uiwebview - PullRequest
2 голосов
/ 08 октября 2009

У меня есть несколько uiwebviews со значительным количеством текста. при вызове javascript window.scrollto (а также window.scroll) веб-просмотров они прокручиваются в неверное место. например Я хочу прокрутить до 12000, но вместо этого веб-просмотр будет прокручиваться до 10149. в то время как еще один прокручивает до 10250. еще один, который я хочу прокрутить до 22000 или около того, вместо этого будет прокручивать до 20230 каждый раз.

это происходит только на устройстве, а не в симуляторе.

Я делаю вызов в webViewDidFinishLoad.

Я пытался звонить несколько раз, но безрезультатнее. Кажется, что какое бы значение не давало конкретному веб-представлению, это самое дальнее значение при использовании вызова scrollto. Нет проблем, если для прокрутки задать меньшее значение. просто если вы передадите это магическое число, каким бы оно ни было для этого веб-просмотра, оно не пойдет дальше.

любой вклад будет высоко ценится

Ответы [ 2 ]

1 голос
/ 09 октября 2009

, поэтому я обнаружил, что проблема была в том, что я слишком рано вызвал функцию scrollTo (хотя я вызывал ее в webViewDidFinishLoad, который, как я предполагал, будет вызываться только после полной загрузки страницы, и, по крайней мере, визуально ). я вставил таймер, чтобы метод scrollTo вызывался через 300 миллисекунд, и об этом позаботились.

1 голос
/ 08 октября 2009

Одна из причин, по которой это может произойти, это то, что вы ссылаетесь на изображения в разметке, не объявляя их размеры явно. Ваши изображения, вероятно, не закончили загружаться, когда вызывается webViewDidFinishLoad :. Браузер выкладывает страницу изначально, используя некоторый предполагаемый размер изображения. Как только изображение загружено и браузер может определить его реальные размеры, он будет переформатировать страницу, что может привести к увеличению общей высоты страницы. Если ваш вызов window.scrollTo происходит до этого перекомпоновки, возможно, вы пытаетесь прокрутить до конца документа.

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

Если по какой-то причине вы не можете предсказать размеры изображения заранее, вы можете отложить вызов window.scrollTo до окончания загрузки изображений, зарегистрировав обработчик события javascript для window.onload, который не срабатывает до все изображения закончили загрузку. В обработчике событий перейдите к вашему window.location.href по некоторому поддельному URL-адресу, например «app: imagesFinishedLoading». В вашем UIWebViewDelegate вы можете реализовать webView: shouldStartLoadWithRequest: navigationType: чтобы перехватить эту навигацию, отменить ее, а затем сделать вызов window.scrollTo.

...