问题::页面上面是一个后台传入的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高度
原文链接:http://www.jianshu.com/p/a9f2450f4e7d
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。