2016-04-08 20 views
2

webViewsに1つのviewControllerがあります。それらのすべてがローカルのhtmlをインラインスタイルシートで表示しています(外部リソースからは何もロードされていません)。コンテンツサイズに基づいて実行時にwebViewsの高さをスケールする必要があります。問題は、最初のWebViewだけが正しくスケーリングされていることです。残りの2つは、私がview controller(f.e.アプリケーションの別の部分に行く)を変更して戻ったときにのみ、サイズをリフレッシュしています。ここで iOS UIWebViewの読み込みが完了した後にサイズが更新されない

は、同じWebビューのデリゲートに接続されている viewDidFinishedLoad

func webViewDidFinishLoad(webView: UIWebView) { 
    if webView.stringByEvaluatingJavaScriptFromString("document.readyState") == "complete" { 
    var height = webView.scrollView.contentSize.height 
    debugPrint(height) 

    if webView == freeWebview{ 
     freePriceHeight.constant = height 
    } 
    if webView == basicPriceWebView{ 
     bacicWebViewHeight.constant = height 
    } 
    if webView == premiumTagWebView{ 
     premiumWebViewHeight.constant = height 

    } 
    debugPrint(webView.stringByEvaluatingJavaScriptFromString("document.body.innerHTML;")) 
    webView.setNeedsUpdateConstraints() 
    webView.layoutIfNeeded() 
    } 
} 

ウェブビューのすべてのコードです。 DebugPrintsそれらのすべてが彼らの完全なコンテンツをロードすることを示しているが、代わりに

webView.setNeedsUpdateConstraints() 
webView.layoutIfNeeded() 

webViewDidFinishLoadが、私は解決策を見つけた

webView.scalesPageToFit = true

+0

高さが主な原因で、おそらく重複していますか?私たちは、ビューがどのように階層構造に配置されているか分かりません。 – Arvind

+0

ビュー階層は、rootView - >スクロールビュー - > contentView - > [webView、webView、webView]の順に配置されています。 WebViewsは制約によって配置され、最初にwebViewがcontentViewの上部に接続され、次のWebViewの上部が前の下部に接続されます。現在ContentViewのサイズは固定されており、完全なコンテンツを持つすべてのWebViewよりもはるかに高いです。 viewControllerに戻ると、別の要素の空き領域がたくさんあります – vortex

答えて

0

が更新されます。前のページが完全に読み込まれた後にのみWebビューを読み込む必要があったので、今度は自分のコードが表示されます

func webViewDidFinishLoad(webView: UIWebView) { 
    if webView.stringByEvaluatingJavaScriptFromString("document.readyState") == "complete"{ 
     var height = webView.scrollView.contentSize.height 
     if webView == freeWebview{ 
      freePriceHeight.constant = height 
      self.prepareSecondWebView() 
     } 
     if webView == basicPriceWebView{ 
      basicWebViewHeight.constant = height 
      self.prepareThirdWebView() 
     } 
     if webView == premiumTagWebView{ 
      premiumWebViewHeight.constant = height 
     } 
    } 
} 
+0

は機能しません。 WebViewsの制約は変更されず、コンテンツのみがデバイスの幅に合わせて縮尺されます – vortex

+0

も私のためには機能しません – Gulz

4

をしようとすると、唯一の高さは

+0

ありがとう、これは私を助けました。ここで重要な点は、WebViewが非同期にロードされるため、すべての要素がロード完了していることを確認する必要があることです。コントローラをwebviewのデリゲートとして設定し、swift 3で関数func webViewDidFinishLoad(_ webView:UIWebView){}を呼び出します。 –

関連する問題