iOS 解决两个tableView.嵌套滚动手势冲突

我们有这样一个场景,就是页面上有一个大的tableView,

每一个cell都是和屏幕一样高的,然后cell中还有一个可以

tableView,比如直播间的情形,这个时候如果我们拖动

cell里面的tableView滚动的话,如果滚动到内部tableView的边缘,会带动外层的tableView滚动,效果如下

这是iOS ScrollView嵌套使用时候自带的一个机制,但是这个效果是我们不想要的,我们想要的效果是我们滚动cell里面的tableView的时候,滚动到边缘,不会带动外层的tableView滚动

经过调试,发现,我们拖动cell中的tableView的时候,

如果该tableView 已经滚动到边缘了,则cell中的tableView不会滚动,系统会自动处理,会执行外部的滚动,这个时候是没有问题的,符合我们的需求,

还有一种情况是需要我们处理的,就是当我们滚动

cell里面的tableView (a)的时候,cell里面的tableView没有滚动到边缘,这个时候,当该a 滚动到边缘,就会带动

外层的tableView滚动,这是我们不想要的,

我们可以这样处理,自定义一个tableView, 重写

gestureRecognizerShouldBegin 方法,在该方法里面,

将外层tableView设置为不可滚动

即,
这里要知道一个机制,就是,如果我们开始拖动的时候,a已经滚动到边缘了,则他的 gestureRecognizerShouldBegin
不会调用

复制代码
@interface LBConfictTableView () <UIGestureRecognizerDelegate>

@end

@implementation LBConfictTableView

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    NSLog(@"哈哈哈哈哈哈内层的开始方法内层的开始方法");
    self.bigTableView.scrollEnabled = NO;
    return YES;
}

@end

然后在停止滚动的时候,将外层tableView设置为可以滚动

复制代码
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    self.tableView.bigTableView.scrollEnabled = YES;
}

看效果图

相关推荐
DeMinds16 分钟前
内容没有丢,我为什么总在重新整理?|DeMinds 如何让工作接着继续
ios·github·markdown
apd_csdn27 分钟前
清华邮箱苹果邮件app设置(全)
ios·thu
寒水馨36 分钟前
macOS下载、安装openclaw-v2026.7.1(附安装包OpenClaw-2026.7.1.dmg)
macos·大模型·github·开源软件·ai助手·openclaw·gpt-5.6
MDM.Plus1 小时前
从“遥控”到“自治”:苹果 MDM 技术的代际跨越与业务重构
ios·智能手机·重构·mdm
黑化旺仔2 小时前
iOS - 天气预报仿写总结
ios
Coffeeee3 小时前
ios零基础的Android开发能否靠AI让老板省一笔人工费呢
android·ios·ai编程
2501_916007473 小时前
深入理解HTTPS对称与非对称加密机制及Charles抓包实践
网络协议·http·ios·小程序·https·uni-app·iphone
2501_916008893 小时前
HTTPS 抓包遇到证书绑定怎么办,使用 TraceEagle 解除 App 证书校验
网络协议·计算机网络·http·网络安全·ios·adb·https
飞雪金灵4 小时前
mac电脑 Maven下载安装和配置环境变量
macos·maven·maven下载安装·mac电脑环境
雨声不在5 小时前
macos 12使用docker
macos·docker·容器