scrollview 嵌套tableview 会导致手势冲突这在苹果官方文档已声明。我也做了尝试(本例是tableview作为列加入到scrollview中,如下图),发现用一个scrollview作为控制器的view时,滑动手势无法识别。但做了一次另外的有趣尝试发现,如果将tableview的父视图scrollview作为一个子视图插入到控制器的view中时,竟然可以识别毫无影响!!!在进一步测试发现,scrollview的宽度至少要小于他的父视图2px,才能不导致手势冲突,否则,即比如scrollview的宽度和view的宽度相同,仍然会冲突。分析了半天也没有头绪,看看大家有何看法。另外我还发现更有趣的困惑相信,由于无法用言语表达,在这里不做论述了。大家一起讨论下哈!我想这是很多人关注的问题,刚才还看到有人提问,额。
一开始的思路,也是最直观的思路就是一个UIScrollView上放多个UITableView,然后发现UITableView的滑动和UIScrollView的滑动产生冲突,用户体验不好。主要原因在于UIScrollView的滑动原理。
基础知识看这里:
http://snorlax.sinaapp.com/?p=178
http://www.devdiv.com/forum.php?mod=viewthread&tid=197496
总结这两篇,问题在于如果想让UITableView可以下拉,并且显示下拉刷新组件,那么就不能让UIScrollView滚动(scrollEnabled=NO),如果想左右滑动显示并列的其他UITableView,那么就需要让UIScrollView可以滚动,但是,怎么知道用户想如何操作?所以此路不通。(即使可以滑动,但效果远远达不到产品需求)
与是就有了下面的想法:用一个UITableView作为背景,但这个UITableView仅有一个cell,然后在这个cell上放一个横着的UITableView,然后在这个横着的UITableView上放N个View,这样也达到了“UIScrollView上放多个UITableView的效果”。
上代码:
背景UITableView:
- //实现Table
- CGRect scrollRect = CGRectMake(0, 0, 320, 460);
- self.tableBgScroll = [[[UITableView alloc] initWithFrame:scrollRect style:UITableViewStylePlain] autorelease];
- [self.tableBgScroll setDelegate:self];
- [self.tableBgScroll setDataSource:self];
- //Table的数据源方法
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- {
- return 1;
- }
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- static NSString *cellname = @"cell";