2011-06-22 15 views
17

UIScrollViewの中にUIWebViewを入れたいと思います。 UIWebViewはiPhoneの画面の外に出ることがあるので、すべてのコンテンツを見ることができるようにビューをスクロールする方法が必要です(ただし、UIWebViewのスクロールを組み込んだりしたくない)。だから、私はすべてのコンテンツをUIScrollViewの中に入れて、UIScrollViewの高さをUIWebViewの高さとそれに含まれる他のビューに等しくすることを考えています。iOS UIScrollView内のUIWebView

ここに私の問題を説明するのに役立つ画像です:

Interface Builder Image

答えて

37

私はまったく同じことをしました。ここで私はそれがうまくなさ方法は次のとおりです。

  1. UIScrollViewの(明らかに;-)
  2. を無効のUIWebViewのネイティブスクロールのサブビューとしてのUIWebViewを追加します(あなたが行うことができるのUIWebViewのサブビューを反復することにより
  3. 。あなたはそれがUIScrollViewの、その上にNO = scrollEnabledセットです見つけるまでUIWebViews HTMLコンテンツのサイズにあなたのUIScrollViewのをcontentSizeとのUIWebViewの枠を設定してください。

あなたがすることはできませんので、最後の点は少しトリッキーですHTMLが完全にレンタルされていることを確認してくださいWebViewDidFinishLoad:がUIWebViewDelegateで呼び出されたときのことです。

ここではHTMLコンテンツのサイズを取得するための信頼性の高い方法です:

1.Add javascript関数HTMLドキュメントの準備ができたときに呼び出されるHTMLに:

window.onload = function() { 
    window.location.href = "ready://" + document.body.offsetHeight; 
} 

この機能が要求を送信しますそのURLにコンテンツの高さがあります。あなたはこの要求をインターセプトし、あなたのUIWebViewDelegate 2.In

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
    guard navigationType == .Other else { return true } 
    if let url = request.URL, let host = url.host { 
     guard url.scheme == "ready" else { return true } 
     if let contentHeight = Float(host) { 
      yourScrollView.contentSize = CGSizeMake(yourScrollView.bounds.size.width, CGFloat(contentHeight)) 
      var fr = webView.frame 
      fr.size = CGSizeMake(fr.size.width, CGFloat(contentHeight)) 
      webView.frame = fr 
     } 

     return false 
    } 

    return true 
} 
+0

できる人:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *url = [request URL]; if (navigationType == UIWebViewNavigationTypeOther) { if ([[url scheme] isEqualToString:@"ready"]) { float contentHeight = [[url host] floatValue]; yourScrollView.contentSize = CGSizeMake(yourScrollView.frame.size.width, contentHeight + yourWebView.frame.origin.y); CGRect fr = yourWebView.frame; fr.size = CGSizeMake(yourWebView.frame.size.width, contentHeight); yourWebView.frame = fr; return NO; } return YES; } 

・ホープここ

UPDATE

を助けスウィフト2バージョンありそれを迅速に翻訳する? –

+0

@YestayMuratov遅く返事を申し訳ありません。私は答えを – joern

+0

@joernにスウィフト2のバージョンを追加しました.HTMLのコンテンツにJSが添付された「もっと見る」リンク(記事を展開または読み込んで展開する)のようなものがあれば動作しません。 – OgreSwamp