正如标题所说,我正在尝试找到一种方法来调整 UIWebView 的宽度以匹配其内容的宽度,直到某个最大宽度。我也想让它匹配高度,但假设我们能找到合适的宽度,许多其他堆栈溢出帖子都回答了高度问题。
举个例子:
如果 webview 的输入是一个页面Hello World
,我想调整 webview 的大小以完全适合Hello world
。相反,如果页面是Hello,<br/>Stack Overflow
,则应将 webview 设置为足够宽以容纳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 的整个宽度,即使它不需要适合所有内容(想象一下左右对齐文本的情况 - 所以内容宽度必须至少跨越整个 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
我不太确定为什么会这样,但是……是的。
有没有办法找到不会触发自动换行的最小宽度?