动态设置webview宽度以匹配内容宽度(和高度)

时间:2013-08-18 03:13:07

标签: ios uiwebview width contentsize

正如标题所说,我正试图找到一种方法来调整UIWebView的宽度以匹配其内容的宽度,直到某个最大宽度。我也希望它与高度相匹配,但假设我们可以找到合适的宽度,高度问题可以通过许多其他堆栈溢出帖来回答。

举个例子:

如果对webview的输入是一个显示Hello World的页面,我想将webview的大小调整为完全适合Hello world。如果页面是Hello,<br/>Stack Overflow,则应将网页视图设置得足够宽,以使Stack Overflow适合一行。如果存在一些非常长的输入,则应将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);
}

上面例子的问题是,当我计算宽度时,webView.scrollView.contentSize.width总是返回maxWebViewWidth或更大,永远不会更少,即使输入很短,如“hello”

如果我们改变

    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的整个宽度,即使它不需要适合所有内容(想象左右对齐的情况) text - 所以内容宽度必须至少跨越整个webview宽度。)

产生不同结果的另一种尝试:

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

实际上,webview宽度的大小与最长的单词相匹配:

输入:hello there thisisalongword lol this isnt working

我们得到以下结果:

hello there
thisisalongword
lol this isnt
working

我不太清楚为什么那样有效但是......是的。

是否有某种方法可以找到不触发自动换行的最小宽度?

1 个答案:

答案 0 :(得分: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;
}