本文主要讲解“iOS ScrollView嵌套tableView交互滚动的思维分析”,简单明了,易学易懂。让我们一起学习边肖的“iOS ScrollView嵌套tableView交互滚动的思维分析”。
前言
随着业务的发展,页面的复杂度越来越高,嵌套滚动查看的方式越来越受到设计师的青睐,这在各大电商应用中非常常见。以下演示图:
但是这种互动不是官方推荐的,对发展也不是那么友好。需要处理滚动手势的冲突,页面的多级嵌套给开发带来了一定的麻烦。接下来,我将谈谈我们的实现思路。
思路和过程
与这个页面结构相对应的,毫无疑问底层是一个垂直的scrollView,页面顶部放置一个固定高度的页眉,后面是一个支持水平滚动切换的容器scrollView,容器上方是每个页面的具体tableView,如下图所示:
思路一
首先想到的是,既然是滚动视图,我们可以通过滚动视图的可滚动属性来实现吗?最开始,顶层具体业务的tableView禁止滚动。然后,根据事件响应链,滚动事件将由底层ScrollView接收和处理。达到最大偏移量后,底层ScrollView禁止滚动,顶层tableView同时打开,顶层可以滑动。不幸的是,现实是残酷的。
因此,当偏移量达到临界值时,由于可滚动属性和最大偏移量的设置,滚动手势将被截断,需要再次拖动才能继续滚动。显然,这种效果是不可接受的。
思路二
这是同事提供的思路。做这个的时候和同事讨论过。他们以前有这样的互动页面,并使用定制手势。但是由于UIScrollView具有弹性效果,普通的滑动手势无法做到这一点,因此有必要引入UIDynamic仿真力场来实现阻尼效果。想了想,虽然在某种程度上是可行的,但是对于一个联动滑动来说,做这么多事情还是比较繁琐的,自定义手势的模拟弹性效果和原生ScrollView的效果可能还是有一定差距的,所以我选择放弃。
思路三
回到第一个想法,除了边界位置会阻挡联动滚动,其他效果还是有可能的,那么能否通过手段解决这个问题呢?既然能写到这里,毫无疑问,绝对有可能。通过手势渗透,即滑动手势可以同时作用于底部的ScrollView和上部的business tableView,并同时控制它们的滚动。通过底层滚动视图实现手势识别协议,同时响应滚动事件:
func gestureRecognizer(_ gestureRecognizer : UIGestureRecognizer,应与其他手势识别器同时识别): UIGestureRecognizer)-Bool { return true }
根据官方文件:
询问代表是否应该允许两个手势识别器同时识别手势。
表达式的意思是问委托是否允许两个手势识别器同时识别手势,所以我们实现了这个协议,“穿透”手势,分别在底层容器和上层业务中实现滚动视图的代理方法funscrolview did scroll(_ scrolview : uiscroll view),分别控制它们的可滚动状态和偏移量,从而达到目的。部分实现如下:
基础容器滚动视图:
func scrollviewdscroll(_ scrollView: UIScrollView){ header view . ishidden=scrollview . content offset . y=maxOffset?真:假如果!superconscroll { scroll view . content offset . y=maxOffset current VC . childcan croll=true } else { if scroll view . content offset . y=maxOffset { scroll view . content offset . y=maxOffset superconscroll=false current VC . childcan croll=true } } }
上层业务表视图:
func scrollviewdscroll(_ scrollView: UIScrollView){ if!childcan croll { scroll view . content offset . y=0 } else { if scroll view . content offset . y=0 { childcan croll=false supercrollblock?(真)} } }
根据底部ScrollView是否达到最大偏移量,控制表头的显示隐藏及对应的偏移量和可滚动状态,在业务tableView中回调ScrollView的可滚动状态,实现状态同步。一般来说是清楚的,详情请见QFMultipleScrollView。
感谢您的阅读。以上就是“iOS ScrollView嵌套tableView互锁滚动的思路分析”的内容。学习完这篇文章,相信你对iOS ScrollView嵌套tableView的互锁滚动的思路分析有了更深的理解,具体用法还需要实践验证。在这里,边肖将为大家推送更多相关知识点的文章。欢迎关注!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/68670.html