iOS ScrollView嵌套tableView联动滚动的思路分析

技术iOS ScrollView嵌套tableView联动滚动的思路分析这篇文章主要讲解了“iOS ScrollView嵌套tableView联动滚动的思路分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小

本文主要讲解“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

(0)

相关推荐

  • java线程思维导图是怎么样的

    技术java线程思维导图是怎么样的这篇文章将为大家详细讲解有关java线程思维导图是怎么样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。晚上在家利用二个小时时间整理了J

    攻略 2021年10月23日
  • 树莓派如何连接WPA2企业级802.1X保护WIFI

    技术树莓派如何连接WPA2企业级802.1X保护WIFI树莓派如何连接WPA2企业级802.1X保护WIFI,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。让

    攻略 2021年11月19日
  • 空间向量,向量空间的标准向量空间怎么求

    技术空间向量,向量空间的标准向量空间怎么求空间中具有大小和方向的量叫做空间向量空间向量。向量的大小叫做向量的长度或模(moduius)。 规定,长度为0的向量叫做零向量,记为0. 模为1的向量称为单位向量。 与向量a长度

    生活 2021年10月22日
  • 云数据库安全的解决方案是什么

    技术云数据库安全的解决方案是什么本篇文章为大家展示了云数据库安全的解决方案是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。综述一、项目背景是指大力推进商务、生产、生活等领域的

    攻略 2021年12月8日
  • 怎么用Python代码批量抠图

    技术怎么用Python代码批量抠图这篇文章主要讲解了“怎么用Python代码批量抠图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python代码批量抠图”吧!1.

    攻略 2021年11月1日
  • sql无效字符执行sql语句报错的解决方法

    技术sql无效字符执行sql语句报错的解决方法本篇文章为大家展示了sql无效字符执行sql语句报错的解决方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。说起来惭愧,总是犯一些小

    攻略 2021年12月1日