商品详情页面特殊制作,获取网页的高度,collectionView根据内容的变化其高度也随着变化
2017-02-15 13:21
477 查看
商品详情页面特殊制作,获取网页的高度,collectionView根据内容的变化其高度也随着变化,首先先看下效果图:
然后我来介绍一下这个界面的总体架构,整个页面上放置一个tableView,下面的网页是tableView的footerview,中间规格所在的区域是一个cell上放置一个collectionView,
问题点1:商品规格可能有很多种,比如颜色、重量。也可能没有规格,所以中间的cell的高度是根据规格的多少而变化的,那么collectionView创建完成以后要怎么通知tableView,让他的cell高度也随着变化呢?
问题点2:网页是tableView的footView,那么如何获取网页的高度来设置tableView的foot呢?
1.首先说下问题1,在collectionView设置完数据源以后会调用这个方法
[self.collectionView performBatchUpdates:^{
//更新collection的约束一定要写在reload完成之前,否则会导致crash
} completion:^(BOOL finished) {
//这里为了防止循环调用该方法,引入isNeedRefresh属性来做控制
NSLog(@"========%f",self.collectionView.collectionViewLayout.collectionViewContentSize.height);
if (!self.isNeedRefresh) {
self.isNeedRefresh = YES;
if (self.sandCollectionViewHeughtBlock) {
self.sandCollectionViewHeughtBlock([NSString stringWithFormat:@"%f",self.collectionView.collectionViewLayout.collectionViewContentSize.height]);
}
}
}];
在这个方法中可以返回collectionView的具体高度,拿到高度后通过block不断传值,把高度传给tableView界面。注意,在tableView界面拿到高度后一定要刷新界面或者刷新指定的cell,不然会导致collectionView上的cell点击后没有任何反应,因为不刷新就不会重新设置tableViewcell的高度。
2.设置网页的详情页。由于网页是放置在tableView的footview上,所以一定要等tableView创建完成后再去加载网页,网页加载完成后再去调用你和后台约定好的js方法来获取网页的高度
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
[GiFHUD dismiss];
// 获取高度 bodyHeight是后台开发人员写的js方法,返回网页的高度
NSString *str = [webView stringByEvaluatingJavaScriptFromString:@"bodyHeight()"];
NSLog(@"JS返回值:%@",str);
self.webViewH = [str floatValue];
self.tableView.tableFooterView = [self setupTableViewFoot];
}
js方法,
function bodyHeight () {
console.log(document.body.scrollHeight);
return document.body.scrollHeight;
}
备注:其实商品详情页面这么做的用户体验也不是很好,类似于淘宝,京东的效果用户体验好,也比较容易实现,上面这种需求是客户的指定需求,没办法,只能这么搞了!
然后我来介绍一下这个界面的总体架构,整个页面上放置一个tableView,下面的网页是tableView的footerview,中间规格所在的区域是一个cell上放置一个collectionView,
问题点1:商品规格可能有很多种,比如颜色、重量。也可能没有规格,所以中间的cell的高度是根据规格的多少而变化的,那么collectionView创建完成以后要怎么通知tableView,让他的cell高度也随着变化呢?
问题点2:网页是tableView的footView,那么如何获取网页的高度来设置tableView的foot呢?
1.首先说下问题1,在collectionView设置完数据源以后会调用这个方法
[self.collectionView performBatchUpdates:^{
//更新collection的约束一定要写在reload完成之前,否则会导致crash
} completion:^(BOOL finished) {
//这里为了防止循环调用该方法,引入isNeedRefresh属性来做控制
NSLog(@"========%f",self.collectionView.collectionViewLayout.collectionViewContentSize.height);
if (!self.isNeedRefresh) {
self.isNeedRefresh = YES;
if (self.sandCollectionViewHeughtBlock) {
self.sandCollectionViewHeughtBlock([NSString stringWithFormat:@"%f",self.collectionView.collectionViewLayout.collectionViewContentSize.height]);
}
}
}];
在这个方法中可以返回collectionView的具体高度,拿到高度后通过block不断传值,把高度传给tableView界面。注意,在tableView界面拿到高度后一定要刷新界面或者刷新指定的cell,不然会导致collectionView上的cell点击后没有任何反应,因为不刷新就不会重新设置tableViewcell的高度。
2.设置网页的详情页。由于网页是放置在tableView的footview上,所以一定要等tableView创建完成后再去加载网页,网页加载完成后再去调用你和后台约定好的js方法来获取网页的高度
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
[GiFHUD dismiss];
// 获取高度 bodyHeight是后台开发人员写的js方法,返回网页的高度
NSString *str = [webView stringByEvaluatingJavaScriptFromString:@"bodyHeight()"];
NSLog(@"JS返回值:%@",str);
self.webViewH = [str floatValue];
self.tableView.tableFooterView = [self setupTableViewFoot];
}
js方法,
function bodyHeight () {
console.log(document.body.scrollHeight);
return document.body.scrollHeight;
}
备注:其实商品详情页面这么做的用户体验也不是很好,类似于淘宝,京东的效果用户体验好,也比较容易实现,上面这种需求是客户的指定需求,没办法,只能这么搞了!
相关文章推荐
- jq_jquer获取iframe的高度根据页面内容自适应
- UItableView Cell 高度自适应--随着多个label内容变化自适应
- 获取WebView加载HTML时网页中的内容 获取页面元素
- 根据网页地址获取页面内容
- tableview 高度适配内容(高度随着cell行数变化而动态变化)及(监听contentsize变化)
- 根据网页地址获取页面内容
- 爬取网页时自动获取网页编码信息,并对特殊的乱码页面(压缩过的网页内容)用gzip进行解码。
- 根据URL地址以流的形式获取页面内容
- webview 获取内容高度?
- TextBox控件怎么根据内容自动变化高度
- js获取浏览器高度和页面内容高度--兼容主流浏览器
- 获取不同浏览器下面的页面的高度(不是提前设定的高度 是内容自己自适应的高度)
- 页面内的内容随着时间动态变化
- python根据url获取网页内容
- c# 远程获取网页内容,防止乱码,页面获取不全
- 获取WebView加载HTML时网页中的内容
- 远程获取网页内容类(请求,返回请求页面内容)
- android webView加载页面时显示出全部网页内容
- JS获取网页高度及屏幕分辨率高度让DIV层始终在页面最底部
- js根据url获取网页内容