RYScrollView

第一次写技术文,功能简单,文笔粗糙,凑活看看,如果能帮助到你,已经很高兴,欢迎反馈各种问题。

仿汽车之家配置对比页面,先看一下效果

就是图片而已

接下来说一下思路吧,大体的思路大家应该都清楚,就是ScrollView或者collectionView和tableview的嵌套

我用的是tableview+collectionView,在这里也需要感谢Hawk_Eleven的文章,我做的东西基本也是在他的基础上改的

不同的是,中间部分,我用了UICollectionView,因为考虑到复用的,我觉得能够复用肯定要更好一些。

下图部分就是控件的摆放了

红、蓝、绿

红色部分是tableview,上下滚动

蓝色部分是collectionView,左右滚动。内部嵌套的tableview,上下滚动

绿色部分是collectionView,左右滚动

因为有组标题的缘故,红色部分是盖在蓝色部分上面的。

在写完UI这三大块控件之后,下面就是控制滚动的部分了

if (scrollView == self.listCollectionView) {        //头部滚动        self.allCollectionView.contentOffset = scrollView.contentOffset;        for (int i = 0; i < self.dataArray.count; i++) {            NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];            AllCollectionCell *cell = (AllCollectionCell *)[self.allCollectionView cellForItemAtIndexPath:indexPath];            cell.tableView.contentOffset = self.listTableView.contentOffset;        }    } else if (scrollView == self.listTableView) {        //左侧滚动        self.listTableY = self.listTableView.contentOffset.y;        for (int i = 0; i < self.dataArray.count; i++) {            NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];            AllCollectionCell *cell = (AllCollectionCell *)[self.allCollectionView cellForItemAtIndexPath:indexPath];            cell.tableView.contentOffset = self.listTableView.contentOffset;        }    } else if (scrollView == self.allCollectionView) {        //内容容器滚动        self.listCollectionView.contentOffset = self.allCollectionView.contentOffset;    } else {        //内容item滚动        self.listTableView.contentOffset = scrollView.contentOffset;    }

详解一下上面的代码

这段代码是在ScrollViewDidScroll中执行的,至于说什么原因就不需要我说了吧

手指触摸屏幕滚动有四部分,左侧列表、头部列表、中间的CollectionView、中间的Tableview

其中,中间部分的滚动和左侧上部的滚动是关联的,

也就是说,左侧的滚动与中间tableView的滚动是等价的,同理,上部的滚动和中间部分的collectionView也是等价的,所以,只要左侧和上不的滚动对应成功了,中间部分的就好说了

所以,上面的代码也就好理解了

有了上面的代码,一个同步滚动的效果就出来了,接下来就是一个填坑的工作了

上面的代码设置完成,如果工程中的tableviewRowHeight没有设置过的话(默认44),滚动是没有问题的,但是一旦设置了tableviewRowHeight,滚动的时候就会有问题了,这个问题困扰了我好久,以至于差点就放弃了,接下来是一个滚动错乱的图

乱了乱了

这个不忍直视的滚动,我看了好久啊

后来也是偶然才修改了下tableview的estimatedRowHeight,改成和所设置的rowHeight一样的大小,问题解决了

好吧,解决了就想一想为什么呗

我猜想,tableview的预估高度被先加载,contentOffSet没有刷新到正确的位置,具体是为什么我也没有深究,如果有哪位大神知道的话,望指教

还有一个问题就是盖在上面的tableview和下面的collectionView的滑动问题,我在Hawk_Eleven的文章中找到的解决办法,那就是通过绘制的路径去判断手机触摸的点是否超过了绘制的路径,CGPathContainsPoint这个方法我不是特别了解,百度查了查,大概知道要绘制路径,我改了改Hawk_Eleven中路径绘制的方式,我直接监听了listTableView的contentSize属性,用这个属性绘制了路径,然后发现,瞎猫碰上了死耗子,同样,如果有大神了解的话评论区指导一下,不胜感激

解决了上面的坑,一个可上下左右滚动的视图基本也就完成了

Demo中对横竖屏做了适配,横竖屏这里的话我就不说了,还在研究中如果有发现有任何问题,望指正

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 我的好朋友兼好姐妹,认识近8年的小伙伴,和她在一起的时光总是开心的。 她是我最亲密的好朋友了,她总是能了解我,在我...
    你的媛媛said阅读 205评论 0 2
  • 善巧方便的三因素: 因素1:关注-因素2:停止-因素3:觉知 说明:对当下敏锐且主动的关注(因素1)导致了思想的暂...
    上溯空性阅读 564评论 0 0

友情链接更多精彩内容