捕手项目的“发现”模块是基于一个
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来实现通知。
结构简图如下:






