正如标题所说,我正试图找到一种方法来调整UIWebView的宽度,以匹配其内容的宽度,最大宽度。我也想让它与高度匹配,但假设我们能找到合适的宽度,高度问题可以通过许多其他堆栈溢出柱来解决。
举个例子:
如果网络视图的输入是一个显示Hello World
的页面,我想将网络视图的大小调整为完全适合Hello world
。如果页面是Hello,<br/>Stack Overflow
,则应将Web视图设置为足够宽,以便在一行中容纳Stack Overflow
。如果有一些非常长的输入,则应将网络视图设置为给定的最大宽度,并在适当的情况下允许换行或侧滚动。理想情况下,这也应该适应不同大小的字体和图像(但可以忽略其他html元素)
我已经尝试了许多不同的技术,人们用来动态地将网络视图的高度设置为内容的高度,但没有一种能达到我想要的宽度。以下是一些例子:
使用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的内容宽度实际上也会覆盖整个网络视图的宽度(想象一下左右对齐的文本的情况,因此内容宽度必须至少覆盖整个网络视景宽度)。
另一种尝试产生了不同的结果:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
webview.frame = CGRectMake(0,0,1,1);
[webView sizeToFit];
}
它实际上调整了网络视图的宽度以匹配最长的单词:
带输入:hello there thisisalongword lol this isnt working
我们得到以下结果:
hello there
thisisalongword
lol this isnt
working
我不太清楚为什么会这样,但是。。。是 啊
有没有办法找到不触发换行的最小宽度?
试试这个代码
- (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;
}