关于 iOS 嵌套UIScrollview的滑动冲突 的思考

嵌套UIScrollview的滑动冲突解决方案
https://www.jianshu.com/p/040772693872
iOS 嵌套UIScrollview的滑动冲突另一种解决方案
https://www.jianshu.com/p/df01610b4e73

类似于抖音个人中心页面这种

之前几位大佬的关于嵌套ScrollView的处理方案如上。

其实,苹果本身是不建议嵌套ScrollView的,并且其实我们不管嵌套怎么处理效果其实都不是完美的理想,都有些许问题。

1、两个滑动事件过渡的时候很突兀
2、通过过渡动画去处理过渡冲突,还是会有细小的问题,适配也比较麻烦,重点是必须要做一套适应的动画。

今天写类似功能的时候看着抖音的个人中心页面发现抖音的一个bug,本着好奇心调了一下bug,突然发现了一个挺简单的实现思路。

其实很简单一个思路:

WX20190311-165452.png

本身我们有一个Base View A

1、A 里面有 一个使用page分页功能的 scrollView 我们称为 C, 并且edage equal 父类,里面放置两页 tableView D

2、然后 我们再在 A 里面 加一个HeaderView,比如一个200高度的headerView

3、然后 把 collectionView的 contentInset 设置为 top 200

4、scrollDidScroll代理中处理 当 collectionView 滑动的时候 HeaderView与collectionView之间一直保持0距离,这样就相当于有了一个两个 collectionView 公用的 headerView了。

存在的问题:

1、由于headerView 是支持事件的,导致在headerView滑动不了底部的collectionView,同时我们不能直接禁用掉事件支持,因为headerView中肯定会放置一些需要响应的按钮之类的元素

解决:

重写headerView中的hitTest方法,过滤掉我们需要响应的元素,其他元素的事件就会传递到底部,也就是collectionView上,也就可以正常滑动了

后续补个demo