2011-09-13 25 views
1

iPad用のObjective-cプロジェクトにUIWebViewを持つViewControllerがあります。 html(loadHtmlStringで)を追加すると、loadHtmlの前にあるスクロール位置を維持しようとしますが、手助けできず、先頭に戻ります。 は、ここで私が使用して線です:私は私のコード 内の異なる場所で、値「scrollY」をテストし、それは私がしたい値scrollPositionにとどまるが、それが終わるときに、画面上に表示 UIWebView scrollToトップへ戻る

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

WebViewは常に一番上にあります(scrollY値は0になります)。 これがなぜ起こるのか理解できる人がいますか?

私はオンラインで数時間、StackOverflowでも確認しました。 私は別の解決策を試しました。 "onclick =" scroll;); falseを返しますが、役に立たない。 webViewを自己委譲し、webViewDidFinishLoadのscrollToを更新しようとしましたが、 WebViewDidFinishLoadは呼び出されません(ブレークポイントに達していません)。インターフェイスと.hの.mをインターフェイスに追加し、ViewDidLoadに次の行を追加しました:webView.delegate = self;

ありがとうございました。

答えて

2

私は再コンパイルした後、webViewDidFinishLoadは、HTMLが更新された後に呼び出され、私は、正しい位置にスクロールすることができるとされたことに気づき、私はのviewDidLoadで使用される自己委任のために 、それはそうなります。

webview.delegate = self; 

私はコードでスクロール位置を計算するのWebViewでHTMLを更新する前に:WebViewのは、更新されたHTMLを持っていたら、この位置に戻って移動するため、

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

その後、私は、使用します。

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

私はパヴェルの答えを、以下のポストを通じてソリューションの一部を発見した: How can I scroll programmatically to the bottom in a uiwebview