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)

相关推荐

  • html的语言特点是什么(html的主要特点是什么)

    技术html的主要特点有哪些本篇内容主要讲解“html的主要特点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“html的主要特点有哪些”吧!

    攻略 2021年12月14日
  • Redis中如何实现支持几乎所有加锁场景的分布式锁

    技术Redis中如何实现支持几乎所有加锁场景的分布式锁小编给大家分享一下Redis中如何实现支持几乎所有加锁场景的分布式锁,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下

    攻略 2021年11月2日
  • R语言做文本挖掘 Part4文本分类

    技术R语言做文本挖掘 Part4文本分类 R语言做文本挖掘 Part4文本分类Part4文本分类
    【发现有人转载,决定把格式什么重新整理一遍,有时间做个进阶版文本挖掘,恩!原文地址:CSDN-R语言做文

    礼包 2021年12月18日
  • mysql命令的常用参数包括什么(这些mysql常用命令你是否还记得)

    技术MySQL基础常用命令有哪些这篇文章主要为大家展示了“MySQL基础常用命令有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL基础常用命令有哪些”这篇文章吧。

    攻略 2021年12月24日
  • 怎么理解Python的calendar模块

    技术怎么理解Python的calendar模块这篇文章主要介绍“怎么理解Python的calendar模块”,在日常操作中,相信很多人在怎么理解Python的calendar模块问题上存在疑惑,小编查阅了各式资料,整理出

    攻略 2021年11月11日
  • 电话查公司,查企业联系方式有哪些方法

    技术电话查公司,查企业联系方式有哪些方法您好,我来为您解答电话查公司。就目前来说,查询企业联系方式,有以下几种办法:1、打114电话查询。
    114可以帮您查询您所需要的企业的联系方式,你只需要把自己想要查询的企业的名称报

    生活 2021年10月26日