android 今日头条评论,模仿"今日头条"webview评论列表的实现

最近项目中遇到一个功能,功能的需求是:

1、webview从服务端接口获取html然后用webview 来展示,webview的高度不定

2、webview下方有一个评论列表,评论列表支持翻页

一开始的想到的实现方式肯定是把webview作为UITableView的Header实现,UITableView 的cell为评论列表,这个方法肯定能实现,这种方式有几个问题:

1、这种方案就必须把webview的contentsize的高度作为webview的高度,因为webview有类似于UITableView的复用机制,是按照展示的需要加载资源和渲染,如果把webview的高度设置成最大,会一次性加载所有的资源到内存(验证见文尾)。

2、webview出现内容到完全得到高度中间有一个时间差,如果图片太多的话这个时间差可能会在 3-5秒,这个是时候如果webview作为TableviewHeader是无法滑动的。

那么该如何支持webview和tableview这两个控件的同方向滑动,而不用去改变他们的frame呢?

想起常用的“今日头条”这个App里面也类似的功能,于是用Reveal这个逆向工程工具查看了“今日头条”页面的UI层级结构,结构如下:

![ae8da28a-9981-467c-ae51-526eca74166a-w400](media/15075490300112/ae8da28a-9981-467c-ae51-526eca74166a.png)

发现今日头条用了一个非常巧妙的方法,就是再添加一个scrollview作为他们的滑动驱动器,它来接收滑动事件,并把滑动事件、offset按需要传递给 webview和tableview 来驱动它们的滑动,webview和tableview本身不相应滑动事件。

简化后的结构图如下:

![UI结构图-w400](http://upload-images.jianshu.io/upload_images/144142-b92811f6e91ad7a3.png?imageMogr2/auto-orient/strip)

接着按照这个思路用Demo验证通过,Demo地址:[DLNestScrollView](https://github.com/slemon/DLNestScrollView)。

> //层级结构代码如下:

> [self.view addSubview:self.scrollView];

> [self.scrollView addSubview:self.webview];

> [self.scrollView addSubview:self.tableView];

> self.tableView.top = kScreenHeight;

> self.webview.scrollView.scrollEnabled = NO;

> self.tableView.scrollEnabled = NO;

在项目中最终实现效果如下:

![image_1-w400](media/15075490300112/image_1.png)

###验证之前的猜想

用UITablview的Header实现的第一个问题,空说无凭证,验证我的猜想:

1)、最直观的感受是,如果把webview作为headerview,也就是contentsize.height = webview.height,加载完滑动的时候,图片根本不会有加载的过程。

2)、用xcode做下实验,加载 url为:https://mp.weixin.qq.com/s/FH0DjxXJlOu0QRPaYk8r2Q 的网页,或者其他图片比较多的页面,目的是方便对比占用内存大小。为了防止缓存的影响,每次都要重置模拟器。得到结果如下图,两者之间的差距与网页占用缓存的大小成正比。

![验证对比图片-w400](http://upload-images.jianshu.io/upload_images/144142-1d7a22d6bb726a09.png?imageMogr2/auto-orient/strip)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值