正如标题所说,我正试图找到一种方法来调整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
我不太清楚为什么那样有效但是......是的。
是否有某种方法可以找到不触发自动换行的最小宽度?
答案 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;
}