捕手项目的“发现”模块是基于一个
UITableView
来实现的,顶部是banner
列表,有个tabBar
作为table
的sectionHeader
,但是在底部其实是类似一个首页的横向滚动的多页ScrollView结构。
因为之前是用一个
UITableView
,所以每次切换下面的多页结构的时候,需要刷新UITableView
,而且记录每个页面的滚动位置,即便做了数据缓存,其实这种结构是很消耗性能的,而且代码逻辑都混在一起(发现该类的代码已经达到了1050行╮(╯▽╰)╭),bug
容易出现;考虑列表可以抽成ChildVC
子页面来实现代码的分散,用横向滚动的UIScrollView
放入tabBar所对应的ChildVC
的tableView,这样就涉及到今天需要讨论的问题:在UIScrollView
中嵌套UIScrollView
。
一种构思:在加载好mainScrollView
和subScrollView
后,如果页面向上滚动,先滚动mainScrollView
,等tabBar
吸顶时候,mainScrollView
停止滚动,subScrollView
开始滚动。
这样涉及到mainScrollView
和subScrollView
在滚动或者拖拽时,代理方法ScrollViewDidScroll
的监听判断问题,这里为了将逻辑代码分散开,我将subScrollView
放在子控制器来管理。这样就监听需要两个UIScrollView
在滚动的的偏移量ContentOffset
,在临界点时候通知对方,这里使用通知NSNotification
来实现通知。
结构简图如下: