请支持原创, 如需转载, 请注明出处@TEASON
之前的文章里有说要写关于UITableView
见解的两篇, 上一篇在这里, 这是下集.
下面的图是网易新闻客户端, 这种结构的首页挺多的, 我仿照写了一下, 总结了下思路, 要实现不是特别困难, 不过有一些细节和问题我觉得有必要注意.
下面是我认为需要注意的地方 .
1.首先, 他是由什么控件组成的 ?
上下两个scrollView, 上面那个控制标签, 下面控制内容, 互相对应切换.
2.如何重用contentView
如果是scrollview, 他里面的内容视图(contentView)要考虑重用, 不然极度浪费内存 .
可能有两种可行的解决方案:
方案(1)外部是scrollView
,内容用三个tableView
来回切换内容对应显示. 这个思路和这个demo(无限循环scrollview)一样一样, 他的优势是可以做成无限循环, 能从最后一张切换到第一张 .
方案(2)用collectionView
实现contentView
重用. 每一个contentView
作为一个collectionViewCell
. collectionView
是scrollview
的子类,所以和第一条不矛盾, 能否通过继承layout
实现这种表现.
3.分离tableview表示逻辑
这在我的一篇文章中提及, 不过这次我没有用block
再回调回ctrller
里, 这样比较适合这个项目, 方便让每个handler
控制一个tableview
的表示逻辑. 分工比较明确.
于是, 在框架出来之后, 只需要传入handler
的List
即可.
demo地址在此
demo由于我是用方案一写的, 精力在自己写重用tableView
上用了好多.不过demo里主要功能和思路都有所体现了 . 欢迎follow我
关于方案二的版本重写collectionViewLayout , 写起来省事很多, 这个布局甚至能用storyboard直接0行代码弄出来布局, 实现起来相当容易,demo就不贴了. 但方案二不能循环. 方案一实现相对比较难, 而且主要是手动实现了view的重用和循环. 故给出方案一 .
此外, 用UIPageViewController也可以解决,应该是方案三.做起来也比较简单.
但. 我认为无论是哪一种方案. 都应该考虑controller过多内存紧张的处理. 我认为是用缓存做是最好的. 其实无论哪一种方案, 重要的是思考过程, 如果急于求成, 类似的框架网上随便找找一大堆, 但是不思考纯粹贴过来就没有意义了. 是不是?