2

タイトルが示すように、UIWebView の幅をそのコンテンツの幅に合わせて最大幅までサイズ変更する方法を見つけようとしています。高さも一致させたいのですが、適切な幅を見つけることができると仮定すると、高さの問題は他の多くのスタックオーバーフロー投稿によって解決されます。

例を挙げると:

WebView への入力が というページである場合、Hello WorldWebView のサイズを正確に合わせる必要がありHello worldます。代わりにページが だったHello,<br/>Stack Overflow場合、webview はStack Overflow1 行に収まる十分な幅に設定する必要があります。非常に長い入力がある場合は、webview を所定の最大幅に設定し、必要に応じてワード ラップまたはサイド スクロールを許可する必要があります。これは理想的には、さまざまなサイズのフォントと画像にも対応する必要があります (ただし、他の html 要素を無視しても問題ありません)。

webview の高さをコンテンツの高さに動的に設定するために人々が使用するさまざまな手法を数多く試しましたが、幅に対して希望どおりに機能するものはありませんでした。ここではいくつかの例を示します。

UIWebview の scrollView.contentSize プロパティを使用:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    webView.frame = CGRectMake(0, 0, [self maxWebViewWidth], 1); // force layout at max Width
    CGFloat width = MIN(webView.scrollView.contentSize.width,[self maxWebViewWidth]); // the width we want to use

    webView.frame = CGRectMake(0, 0, width, 1); // force layout at our width
    CGFloat height = webView.scrollView.contentSize.height; //the height we want to use

    webView.frame = CGRectMake(0, 0, width, height);
}

上記の例の問題は、幅を計算しているときに、入力が「hello」のように短い場合でも、webView.scrollView.contentSize.width は常に maxWebViewWidth 以上を返し、それ以下にはならないことです。

私たちが変われば

    webView.frame = CGRectMake(0, 0, [self maxWebViewWidth], 1); // force layout at max  Width

    webView.frame = CGRectMake(0, 0, 1, 1); // force layout at some small width

最も幅の広い文字に一致する幅が得られ、次のような結果が得られます。

H
e
l
l
o

sizeThatFits と、高さと幅にアクセスする JavaScript の方法を使用して、同様の結果を達成しました。

上記の結果の理由は、すべてのコンテンツを収める必要がない場合でも、webivew のコンテンツ幅が実際には webview の幅全体に及ぶためだと思われます (左と右の両方に配置されたテキストの場合を想像してください。コンテンツの幅は、少なくとも Web ビューの幅全体にまたがる必要があります)。

異なる結果をもたらした別の試み:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    webview.frame = CGRectMake(0,0,1,1);
    [webView sizeToFit];
}

最長の単語に一致するように実際にWebビューの幅のサイズを変更したのは次のとおりです。

入力で:hello there thisisalongword lol this isnt working

次の結果が得られます。

hello there
thisisalongword
lol this isnt
working

なぜそれがそのように機能するのかはよくわかりませんが...ええ。

ワードラップをトリガーしない最小幅を見つける方法はありますか?

4

1 に答える 1

0

このコードを試してください

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    int content_height = [[_textWebview stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] integerValue];
    CGRect rect = _textWebview.frame;
    rect.size.height = content_height+15;
    _textWebview.frame = rect;
}
于 2014-01-09T10:12:52.950 に答える