动态设置Web视图宽度以匹配内容宽度(和高度)



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

相关内容

  • 没有找到相关文章

最新更新