Web和本地页面同存在一个页面时的计算高度问题

问题::页面上面是一个后台传入的HTML代码要用webView加载,然后紧接着下面是一个横向滑动的collectionView。

关键的点::上面的webView要根据加载的HTML代码计算出高度,然后重新改变页面的布局,

我的做法::

1刚开始的布局:页面是一个上放上一个scrollView,(因为webView高度很可能太大一个屏幕显示不下这样底下的collectionView就看不到了,所以页面大小要能改变),然后上面放上一个webView下面放上collectionView。

2获取HTML代码进行处理计算webView高度:这个部分大家上网找都会找到一个方法获取(在webView加载完成代理里面执行)

CGFloat scrollHeight = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];

这个是调用HTML的方法得到HTML页面的高度,但是这个高度很可能是不准确的Ps:大多时候不准确,分析了很久发现不准确是因为,HTML页面的宽度是不对应的屏幕宽度的,所以我们要将返回的HTML代码进行处理使其适应屏幕的宽度这样得到的高度就是准确的了,具体做法如下

NSString * headStr = [NSString stringWithFormat:@"<div style=\"width:%f;height:auto;\">",[UIScreen mainScreen].bounds.size.width-10];

NSString * lineStr = @"</div>";                

NSString * htmlStr = [NSString stringWithFormat:@"%@%@%@",headStr,_brandModel.brand.content,lineStr];

具体意思是自己拼接一段HTML代码把整个页面变成一个div(盒子)然后设定div的宽度是你屏幕的宽度,高度自适应这样我们得到的HTML高度就是准确的了,


3.更新页面的布局:

CGFloat scrollHeight = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];//得到webView高度

CGRect oldHeaderWenHeight = self.headWebView.frame;

oldHeaderWenHeight.size.height = scrollHeight;

self.headWebView.frame = oldHeaderWenHeight;//刷新webView高度


self.bgscrollView.contentSize = CGSizeMake(DEF_SCREEN_WIDTH, scrollHeight+itemHeight);//刷新scrollView高度


CGRect oldCollectionView = self.collectionView.frame;

oldCollectionView.origin.y = webViewHeight;

self.collectionView.frame = oldCollectionView;//刷新CollectionView高度



文/iOS_windKing(简书作者)
原文链接:http://www.jianshu.com/p/a9f2450f4e7d
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值