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

标签 ios uiwebview width contentsize

正如标题所说,我正在尝试找到一种方法来调整 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

我不太确定为什么会这样,但是……是的。

有没有办法找到不会触发自动换行的最小宽度?

最佳答案

试试这个代码

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

关于ios - 动态设置 webview 宽度以匹配内容宽度(和高度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18295320/

相关文章:

ios - React Native FBSDK 无法识别的选择器发送到实例

javascript - 使用javascript在UIWebView中隐藏div

javascript - iPhone 在 UIWebView 中加载 Htmlstring 并使用 Javascript 替换文本

jquery - 多条件窗口宽度和

ios - UICollisionBehavior 仅在第一次添加后起作用

ios - 'NSInvalidArgumentException',原因 : 'keypath Patient.nachname not found in entity <NSSQLEntity Patient id=1>'

css 100% 宽度当水平滚动条

css - ul 在 nowrap 文本后不增加宽度

ios - 无法在 xcode 8.3.2 中更改 xib 文件方向

ios - 如何获取 UIWebView 中选中文本的坐标(CGRect)?