UIWebView scrollTo受到返回顶部的阻碍

时间:2011-09-13 09:46:51

标签: uiwebview scroll

我在iPad的Objective-c项目中有一个带有UIWebView的ViewController。 当我添加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上查了几个小时。 我尝试了不同的解决方案(比如在我的webview中添加JavaScript“onclick =”scroll();返回false;“但无济于事。 我试图自我委托webView并更新webViewDidFinishLoad中的scrollTo,但似乎没有调用webViewDidFinishLoad(没有到达断点),尽管我在界面中添加了.h,在ViewDidLoad中添加了.m: webView.delegate =自我;

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

我意识到重新编译后,在html更新后调用了webViewDidFinishLoad,然后我可以滚动到正确的位置。 对于我在viewDidLoad中使用的自我委托,它看起来如此:

webview.delegate = self;

在更新webView中的html之前,我使用代码计算滚动位置:

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

然后,为了在webView有更新的html后回到这个位置,我然​​后使用:

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

我通过下面的帖子找到了解决方案的一部分,并得到了Pawel的答案: How can I scroll programmatically to the bottom in a uiwebview