如何在UIWebView上设置滚动位置

15

我想让我的UIWebView加载后自动滚动到指定的行。 我尝试使用下面的代码:

[webView stringByEvaluatingJavaScriptFromString:@"window.scrollTo(0.0, 100.0)"];

但是它没有起作用,我的webview仍然从页面顶部开始显示。 我怀疑这是因为我将UIWebview加载在UIView内部。 以下是我在UIView中的代码:

- (void)loadView {
    webview = [[WebViewDetail alloc]initWithFrame:[UIScreen mainScreen].applicationFrame];        //initialize a mainView is a UIWebVIew
    webview.managedObjectContext = self.managedObjectContext;
    webview.kitab = self.kitab;
    webview.currentPasal = self.pasal;
    self.title = [NSString stringWithFormat:@"%@ %d", self.kitab, webview.currentPasal];
    self.view=webview;    //make the mainView as the view of this controller    
}

我将滚动定位脚本放在了我的 UIWebView 上:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    int height = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"] intValue];

    NSString* javascript = [NSString stringWithFormat:@"window.scrollBy(0, %d);", height];   
    [self stringByEvaluatingJavaScriptFromString:javascript];
}

在这种情况下,我想让我的UIWebView在视图加载时滚动到页面底部。 但是它完全不起作用,为什么? 我做错了什么吗?

2个回答

20

尝试

webview.scrollView.contentOffset = CGPointMake(0, 100);

我把它放在UIWebView的webViewDidFinishLoad中,但它不能正常工作,滚动条仍然显示在页面顶部。还有其他想法吗? - dejoong
2
@dejoong:你确定你的页面可以滚动吗?尝试在webViewDidFinishLoad之后设置一个1秒的定时器,看看是否会有滚动效果。 - Daniel
很奇怪,当我调用这个方法(包含webview.scrollView.contentOffset = CGPointMake(0, 100);)每1秒它都能正常工作,但是如果我直接调用这个方法就不起作用。你知道为什么吗? - dejoong
@dejoong:webViewDidFinishLoad完成后,某些东西正在滚动视图。我不知道那个东西是如何工作的,但我猜测可能有一个稍后可以使用的方法。 - Daniel

6

确保您将网页视图所在的视图控制器设置为UIWebViewDelegate,并在标头文件(.h)的@interface中声明。

[yourWebView setDelegate:self];

然后,在webViewDidFinishLoad:方法中,插入以下代码:
[yourWebView.scrollView scrollRectToVisible:CGRectMake(0, yourWebView.bounds.size.height + 100, 1, 1) animated:NO];           

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接