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;
}

看效果图

相关推荐
HarderCoder5 小时前
iOS 知识积累第一弹:从 struct 到 APP 生命周期的全景复盘
ios
goodSleep10 小时前
更新Mac OS Tahoe26用命令恢复 Mac 启动台时不小心禁用了聚焦搜索
macos
叽哥16 小时前
Flutter Riverpod上手指南
android·flutter·ios
用户092 天前
SwiftUI Charts 函数绘图完全指南
ios·swiftui·swift
YungFan2 天前
iOS26适配指南之UIColor
ios·swift
权咚2 天前
阿权的开发经验小集
git·ios·xcode
用户092 天前
TipKit与CloudKit同步完全指南
ios·swift
小溪彼岸2 天前
macOS自带截图命令ScreenCapture
macos
法的空间3 天前
Flutter JsonToDart 支持 JsonSchema
android·flutter·ios
2501_915918413 天前
iOS 上架全流程指南 iOS 应用发布步骤、App Store 上架流程、uni-app 打包上传 ipa 与审核实战经验分享
android·ios·小程序·uni-app·cocoa·iphone·webview