UIWebView框架高度基于内容高度

时间:2014-04-03 05:22:03

标签: html ios css uiwebview

我目前有一个UIWebView对象,它注入了以下html字符串:

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <style type="text/css">
        body {
            color: purple;
            background-color: #d8da3d;
        }
    </style>
</head>
<body>
    <div id="content" contenteditable="true"> </div>
    <div style="font-family: Helvetica"> Sample text </div>
</body>
</html>

似乎使用上面的html代码,所讨论的WebView的contentSize高度是548px,实际上,它应该远低于此,因为只有两行。我还修改了向www.google.com加载网址请求。根据我设置的断点,contentSize似乎确实增加了适当的数量。

所以我想知道的是,是否可以根据WebView的内容调整contentSize高度(或者在我的情况下,使用上面的html文本设置WebView)。我怀疑我可能必须指定某种.css参数,例如高度或最小高度(我已经尝试过这样做,但无济于事)。任何帮助将不胜感激!

编辑:不确定这是否有帮助,但这是我用来设置html内容的代码。我已将.html文件包含在项目中,并使用View Controller中的以下行设置了WebView(使用storyboard创建)html内容:

NSString *path = [[NSBundle mainBundle] pathForResource:@"compose" ofType:@"html"];
NSString *htmlString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
[self.webView loadHTMLString:htmlString baseURL:nil];

enter image description here

Edit2:经过一些修补,我想我知道发生了什么。似乎在WebView的内容高度<1的情况下。查看高度,它将自动默认为WebView的框架。通过实验,似乎只要UIWebView的帧发生变化,UIBrowserView的框架就会发生变化。似乎我不能改变一个而不影响另一个。

2 个答案:

答案 0 :(得分:3)

确定UIWebView内容高度的唯一可靠方法是在完全呈现HTML后通过Javascript执行此操作。

webViewDidFinishLoad:中获取高度的问题是,在将HTML加载到UIWebView之后立即调用此方法。但这并不意味着HTML已经完全呈现。这可能导致随机和错误的高度。

因此,要获得真正的高度,您必须在HTML DOM中监听onLoad事件。然后将高度发送到UIWebView。

您可以在我之前写的blog post中找到有关如何执行此操作的详细说明。

编辑:

所以这是一个特殊情况,其中HTML内容实际上小于UIWebView框架。获得<body>的高度在这种情况下不起作用,因为正文总是延伸到整个框架。

您必须稍微更改HTML。您必须添加一个包装HTML内容的元素:

<body>
    <div id="wrapper">
       <div id="content" contenteditable="true"> </div>
       <div style="font-family: Helvetica"> Sample text </div>
    </div>
</body>

然后在Javascript片段中返回该包装元素的高度:

<script type="text/javascript">
   window.onload = function() { 
      window.location.href = "ready://" + document.getElementById('wrapper').offsetHeight;
   }
</script>

这将返回HTML内容的正确高度。更重要的是:因为<body>元素获得默认边距,您必须将边距设置为0:

<style type="text/css">
    body {
       margin:0;
       color: purple;
       background-color: #d8da3d;
    }
</style>

现在您可以获得正确的尺寸,并且可以根据UIWebView的高度移动标签。

答案 1 :(得分:0)

试试这个

- (void)webViewDidFinishLoad:(UIWebView *)aWebView {


    NSLog(@"%f",aWebView.scrollView.contentSize.height);

    CGRect frame = aWebView.frame;
    frame.size.height = aWebView.scrollView.contentSize.height;
    aWebView.frame = frame;
}