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

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.lqws.cn/news/68221.html

相关文章:

  • 线段树刷题记录
  • OpenCV——Mac系统搭建OpenCV的Java环境
  • 详解鸿蒙仓颉开发语言中的计时器
  • C++面向对象编程:类与对象详解
  • 【AI智能体】Spring AI MCP 从使用到操作实战详解
  • Caliper压力测试
  • 使用new操作符动态分配
  • 有公网ip但外网访问不到怎么办?内网IP端口映射公网连接常见问题和原因
  • JDK21深度解密 Day 11:云原生环境中的JDK21应用
  • JVM——从JIT到AOT:JVM编译器的云原生演进之路
  • 常见算法题目5 -常见的排序算法
  • LabVIEW准分子激光器智能控制系统
  • 【Pytorch学习笔记】模型模块07——hook实现Grad-CAM
  • 数据库系统概论(十四)详细讲解SQL中空值的处理
  • Spring框架学习day6--事务管理
  • 《人性的弱点》能带给我们什么?
  • IoTGateway项目生成Api并通过swagger和Postman调用
  • [免费]微信小程序网上花店系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
  • 提升嵌入式软件调试效率的核心方
  • 内存管理--《Hello C++ Wrold!》(8)--(C/C++)--深入剖析new和delete的使用和底层实现
  • 【Linux】网络--网络层--IP协议
  • PyTorch——卷积层(3)
  • CppCon 2014 学习:0xBADC0DE
  • CSS之动画(奔跑的熊、两面反转盒子、3D导航栏、旋转木马)
  • 小目标检测:YOLOV7改进之双坐标注意力(DCA)
  • TDengine 高级功能——读缓存
  • 汽车安全体系:FuSa、SOTIF、Cybersecurity 从理论到实战
  • 机器人自动火焰切割H型钢的系统设计与应用
  • 机器人夹爪的选型与ROS通讯——机器人抓取系统基础系列(六)
  • 【Redis】Set 集合