当前位置: 首页 > article >正文

ios tableview吸顶

由于项目需要实现一个上滑吸顶的效果,网上也看到有很多种方式实现,但是如果加上下拉刷新的功能会导致界面异常,还有第三方库实现方式库,太繁琐了,下面是我的实现方式,效果如下:

tablevie滑动吸顶

主要代码部分:

横线滚动代理方法updateTopViewFrame

//父视图滚动的回调,用于横向滚动判断
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{NSLog(@"scrollViewDidScroll - %.2f, %.2f",scrollView.contentOffset.x, scrollView.contentOffset.y);CGFloat placeholderOffset = 0;UIScrollView *scroll;if (self.topView.selectedIndex == 0) {scroll = self.firstTableView;}else {scroll = self.secondTableView;}if (scroll.contentOffset.y > CGRectGetHeight(self.topView.frame) - self.topView.itemHeight) {placeholderOffset = CGRectGetHeight(self.topView.frame) - self.topView.itemHeight;}else {placeholderOffset = scroll.contentOffset.y;}//当主talbeview向上滑动的时候,要禁止主scrollerview滑动,if([scrollView isKindOfClass:CustomScrollView.class]){if(scrollView.contentOffset.y >= 0){ //向上滑动self.ctyscrollview.contentOffset = CGPointZero;self.ctyscrollview.scrollEnabled = NO;self.firstTableView.contentOffset = CGPointZero;self.secondTableView.contentOffset = CGPointZero;}return;}[self.secondTableView setContentOffset:CGPointMake(0, placeholderOffset) animated:NO];[self.firstTableView setContentOffset:CGPointMake(0, placeholderOffset) animated:NO];
}

纵向滑动代理方法updateTopViewFrame

//子视图滚动的回调,用于竖直方向上滚动判断
- (void)updateTopViewFrame:(UIScrollView *)scrollView{CGFloat placeHolderHeight = CGRectGetHeight(self.topView.frame) - self.topView.itemHeight;CGFloat offsetY = scrollView.contentOffset.y;//顶部topiview跟随滑动CGFloat y = 0.0;if (offsetY >= 0 && (offsetY <= placeHolderHeight)) {NSLog(@"1- offsetY:%.2f <= placeHolderHeight:%.2f", offsetY, placeHolderHeight);y = -offsetY;} else if (offsetY > placeHolderHeight) {NSLog(@"2- offsetY:%.2f > placeHolderHeight:%.2f", offsetY, placeHolderHeight);y = -placeHolderHeight;} else if (offsetY < 0) {NSLog(@"3- offsetY:%.2f < 0,  placeHolderHeight:%.2f", offsetY, placeHolderHeight);y = -offsetY;}self.topView.y = y;//当主scrollerview滑动的时候,tableview要禁止滑动,if(offsetY <= 0){self.ctyscrollview.scrollEnabled = YES;self.firstTableView.contentOffset = CGPointZero;self.secondTableView.contentOffset = CGPointZero;if(!CGPointEqualToPoint(self.ctyscrollview.frame.origin, CGPointZero)){self.ctyscrollview.contentOffset = CGPointZero;}}else{self.ctyscrollview.scrollEnabled = NO;}
}

CustomScrollView中需要加上以下联动代理方法


///允许同时接受手势
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{return YES;
}

demo代码下载地址:

Jack/多tableview滑动吸顶

http://www.lryc.cn/news/2397095.html

相关文章:

  • PyTorch——DataLoader的使用
  • 【Python 进阶2】抽象方法和实例调用方法
  • 第1章:走进Golang
  • Predixy的docker化
  • C++ 之 多态 【虚函数表、多态的原理、动态绑定与静态绑定】
  • 【JavaWeb】Maven、Servlet、cookie/session
  • [蓝桥杯]阶乘求值【省模拟赛】
  • 鸿蒙OSUniApp微服务架构实践:从设计到鸿蒙部署#三方框架 #Uniapp
  • Rust 编程实现猜数字游戏
  • 关于神经网络中的激活函数
  • CentOS_7.9 2U物理服务器上部署系统简易操作步骤
  • 第十三篇:MySQL 运维自动化与可观测性建设实践指南
  • 短视频平台差异视角下开源AI智能名片链动2+1模式S2B2C商城小程序的适配性研究——以抖音与快手为例
  • HTTP 如何升级成 HTTPS
  • 【笔记】Windows 下载并安装 ChromeDriver
  • Spark-Core Project
  • SQL 中的 `CASE WHEN` 如何使用?
  • Wireshark 使用教程:让抓包不再神秘
  • JWT安全:接收无签名令牌.【签名算法设置为none绕过验证】
  • 什么算得到?什么又算失去?
  • 白银价格查询接口如何用Java进行调用?
  • FreeBSD 14.3 候选版本附带 Docker 镜像和关键修复
  • NodeJS全栈WEB3面试题——P6安全与最佳实践
  • 「Java教案」算术运算符与表达式
  • Ubuntu开机黑屏现象的常见解决方案详解
  • 黑马程序员C++核心编程笔记--4 类和对象--多态
  • 论文写作核心要点
  • [java]eclipse中windowbuilder插件在线安装
  • Ubuntu20.04服务器开启路由转发让局域网内其他电脑通过该服务器连接外网
  • 【Oracle】TCL语言