2013-08-18 50 views
2

,我试图找到一种方法来调整UIWebView的宽度以匹配其内容的宽度,直到某个最大宽度。我也想让它与高度相匹配,但假设我们可以找到合适的宽度,高度问题可以通过许多其他堆栈溢出帖子来解决。如标题所示,动态设置webview宽度以匹配内容宽度(和高度)

举个例子:

如果输入到网页视图是一个页面,说:Hello World,我想大小web视图,以便恰好符合Hello world。如果页面为Hello,<br/>Stack Overflow,则应将Web视图设置为足够宽以便在一行上适合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或更大,从来没有少,即使输入很短,如“你好”

如果我们改变

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

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

- (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 

我不是qui确定为什么那样工作,但是......是的。

有没有找到不触发文字换行的最小宽度的方法?

+0

我还没有机会看到,如果这个工程,但我想到了一个主意: 如果通过JavaScript访问HTML源(或者,如果你不要),你可以将所有内容都包裹在一个内联div/span标签中,它应该做收缩包装。 然后强制webview的布局到你的maxWidth。 在这一点上,div元素的大小应该与您正在查找的大小相匹配。你应该能够使用javascript找到div元素的大小。 当我有机会尝试这个结果时,我会回复结果。 – psilencer

回答

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; 
} 
相关问题