2016-07-19 18 views
1

"動的な画面の高さ"でUIWebViewを作成しようとしています。このWebviewはUIScrollView内にあり、他のコンポーネントの下にあります。 (それは自動レイアウトを使用しています)、レイアウトを参照してください - とWebViewのビューポートは、コンテンツサイズを依存し成長させるObjective-CのUIScrollView内で動的な高さを持つUIWebView

enter image description here

私の考えは、(その作業UIScrollViewのから)一つだけのスクロールを提供することです。そしてそれは働かない。私はこれをしようとしていた何

  1. のUIWebViewのプロパティ「に合わせてスケールのページは、」上にあります。
  2. UIWebViewのページは固定されていません。
  3. UIWebViewではユーザーの操作が許可されていません。私のUIViewControllerで

マイUIWebViewDelegate:

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    CGRect frame = webView.frame; 
    frame.size.height = 1; 
    webView.frame = frame; 
    CGSize fittingSize = [webView sizeThatFits:CGSizeZero]; 
    frame.size = fittingSize; 

    webView.frame = frame; 


    NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height); 

    _myScrollView.contentSize = webView.bounds.size; 
} 

私は、コードを実行すると、それが正しいUIScrollViewのサイズとのUIWebViewのサイズを出力します。 UIScrollViewの高さは大きくなりましたが、UIWebViewは最初の読み込みと同じ高さを維持します。

私は実際のデバイスでテストしています。

+0

動的高さ、私は私はそれを設定していないset.But webViewDidFinishLoadView方式で高さを設定する必要がありますレイアウトの制約。私はあなたに尋ねます。私のコードは役に立ちますか? – user3182143

答えて

4

あなたのWebViewに高さ制約を追加し、あなたのWebViewをロード

@property(strong, nonatomic) IBOutlet NSLayoutConstraint *webViewHeightConstraint; 

のようなもののIBOutletを作成し、Webビューのデリゲートに

- (void)webViewDidFinishLoad:(UIWebView *)webView 

は、WebViewのコンテンツの高さを取得し、以下のようなwebViewHeightConstraint.constant を設定: -

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 

    NSString *str = [webView stringByEvaluatingJavaScriptFromString:@"(document.height !== undefined) ? document.height : document.body.offsetHeight;"]; 
    CGFloat height = str.floatValue; 
    webViewHeightConstraint.constant = height; 

} 

希望するmaあなたを助けます。

+0

魅力的な作品です。ありがとう! – marceloquinta

+0

これだけです。 – user3182143

+0

@ user3182143ハッピーコーディング!歓声 –

0

(viewDidLayoutSubviewsにwebView.frame = frame;を設定するようにしてください)

0

あなたはwebView.scrollView.contentSize.heightを使用してWebViewのコンテンツのコンテンツサイズを取得することができます。

このwebView.scrollView.contentSize.heightを使用して、スクロールビューのcontentSizewebViewDidFinishLoadメソッド内に設定することができます。このよう

のUIWebViewのための動的な高さを設定する方法

[objWebView setFrame:CGRectMake(objWebView.frame.origin.x, objWebView.frame.origin.y, objWebView.frame.size.width, webView.scrollView.contentSize.height)]; 
if(objWebView.frame.origin.y+objWebView.frame.size.height > objScrollView.contentSize.height) { 
    [objScrollView setContentSize:CGSizeMake(objScrollView.frame.size.width, objWebView.frame.origin.y+objWebView.frame.size.height)]; 
} 
+0

uiwebviewコンテンツの高さは変更されませんでした。 – marceloquinta

0

webViewDidFinishLoadに、あなたは

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    CGFloat height = [[webview stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue]; 
    //For Width 
//CGFloat width = [[webview stringByEvaluatingJavaScriptFromString:@"document.width"] floatValue]; 
CGRect frame = webview1.frame; 
frame.size.height = height; 
//frame.size.width = width; //Width 
webview.frame = frame; 

CGRect screenBounds = [UIScreen mainScreen].bounds ; 
CGFloat widthForIpad = CGRectGetWidth(screenBounds) ; 
CGFloat heightForIpad = CGRectGetHeight(screenBounds) ; 
NSLog(@"The iPad width is - %fl",widthForIpad); 
NSLog(@"The iPad height is - %fl",heightForIpad); 

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
{ 
    if ([[UIScreen mainScreen] bounds].size.height == 568) 
    scrollView.contentSize = CGSizeMake(320, height+370); //set your required height 
    else 
    scrollView.contentSize = CGSizeMake(320, height+350); //set your required height 
    } 
    else 
    { 
    if ([[UIScreen mainScreen] bounds].size.height == 1024) 
     scrollView.contentSize = CGSizeMake(320, height+370); //For iPad 
    } 
} 
関連する問題