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