有一个信息流的数据需要展示,每个cell的布局都不一样(参考QQ空间动态页面),cell里有文字图片回复等,请设计一种展示方式,要求tableView滚动的时候不卡顿。
这个怎么做啊?每个cell的布局都不一样就不能用重用机制
有一个信息流的数据需要展示,每个cell的布局都不一样(参考QQ空间动态页面),cell里有文字图片回复等,请设计一种展示方式,要求tableView滚动的时候不卡顿。
这个怎么做啊?每个cell的布局都不一样就不能用重用机制
可以总结出需要解决两个问题。
在tableView中显示不同类型的Cell。可参考下面的方案:
给数据源加一个字段,比如Type,用来表示它的类型。在tableView:cellForRowAtIndexPath:
方法中,根据数据源源的Type的不同,分别加载不同类型的Cell。
保证不卡顿。tableView在滑动时卡顿的原因无非是Cell中的数据没有加载完成而导致渲染时在某一界面卡住。可以参考下面的方案:
用- tableView:estimatedHeightForRowAtIndexPath:
方法。根据官方文档的介绍,提供预计高度,可以提升用户体验。这个做法是延缓Cell的高度计算。
利用多线程机制。将计算高度、请求数据这些耗时的操作,开辟另外一个线程进行,不要影响界面的渲染。
如果需要加载大量图片,建议使用SDWebImage
或者YYWebImage
框架。这个框架可以做到异步加载、断点续传以及缓存机制。或者通过在服务器端处理,将在Cell中加载的图片进行压缩,在点击后或者有WiFi的情况下,再下载原图。这样既可以保证显示流畅,又可以做到节省流量。
视频和图片建议使用云存储。它们提供对多媒体在服务器端处理,省时省力。
上面的方案,仅仅是我自己的构想,具体的操作我没有太多的实践经验。仅供参考。求轻喷。
推荐一篇文章——《iOS 保持界面流畅的技巧》,是YYKit的作者ibireme所写。
根据题目说是,滚动的时候不卡顿,那么,可以在初始化这个tableview的时候就缓存好所有Cell的高度,然后在加载每个Cell的时候就不用再去计算,就不会卡顿,tableview的滑动的卡顿主要原因是Tableview在加载每个cell的时候花费的时间太长,其中这种不定高度的Cell由于在tableview的高度代理里面会普遍使用自己初始化一边这个Cell并赋值得到高度返回的方法,这种方法可能会消耗一定的计算量,因此,会导致卡顿,然后,每个Cell上如果有一些模糊或者一些渲染的高消耗性能的方法,需要延迟执行,当Cell划出界面之后需要取消这些操作,如上是我的一些回答
2 回答1.1k 阅读
1 回答991 阅读✓ 已解决
1 回答2.7k 阅读
1 回答1.4k 阅读
1.7k 阅读
1 回答1.1k 阅读
1.3k 阅读
看了一眼QQ空间的页面,每条状态的布局是一样的,只是因为内容不同,所选的控件不同,高度也有所不同。都是包含了头像,昵称,内容,点赞,评论等。所以还是用的cell。