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

看效果图

相关推荐
HouWan7 小时前
Flutter: MediaQuery.of(context) 为什么可能拖慢页面?
android·flutter·ios
用户38034165882978 小时前
Broadcast Extension 里的 Live Activity:一次跨进程妥协
ios·音视频开发
匠测AI说8 小时前
XCUITest 自动化全解:同进程白盒、XCTest 架构、自动同步机制与 iOS 端选型指南
测试工具·ios·自动化
shark-chili10 小时前
关于AI辅助编程的认知
数据库·人工智能·redis·macos·缓存
silianpan12 小时前
CAD 文档预览 UTS 插件
android·ios·harmonyos
世纪末の魔术师13 小时前
从 Healthory 到 Nature Aimanic:两款 iOS App 审核实战后,我总结了这份过审清单
ios·ios过审·苹果过审·ios应用过审
庚鑫13 小时前
macOS 27 上维护 Xcode 15.2 老项目:一次 AssetCatalogSimulatorAgent 构建故障排查
ios·apple
2501_9159184113 小时前
使用 VS Code 写 Swift 做 iOS 开发,插件能实现哪些功能,还有哪些短板
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
zwd200515 小时前
Mac 上写英文遇到不会的词,有哪些工具?输入法、翻译软件、写作助手怎么选
人工智能·macos·效率工具·英语写作·输入法·deepl·翻译工具