UITableView在UIScrollView中滚动问题

我有一个UIScrollView(与分页),我添加了三个UIViews。 每个UIViews里面都有一个UITableView。 因此,用户应该能够水平滚动到他想要的页面,然后在相应的表格中垂直滚动。

但是,有些表格没有收到滚动手势。 通常情况下,第一个performance不错,但其他performance不好。 我无法select单元格,也无法向上或向下滚动表格。

我使用了UIScrollView的默认设置,除了在viewDidLoad中定义的这些设置:

- (void)viewDidLoad { [super viewDidLoad]; //Load the view controllers [self loadViewControllers]; //Configure the scroll view self.scrollView.pagingEnabled = YES; self.scrollView.contentSize = CGSizeMake(CGRectGetWidth(self.scrollView.frame) * viewControllers.count, CGRectGetHeight(self.scrollView.frame)); self.scrollView.showsHorizontalScrollIndicator = NO; self.scrollView.showsVerticalScrollIndicator = NO; self.scrollView.scrollsToTop = NO; self.scrollView.delegate = self; //Configure the page control self.pageControl.numberOfPages = viewControllers.count; self.pageControl.currentPage = 0; } 

我不知道为什么我不能滚动一些表…任何帮助将不胜感激。

提前致谢!

我会检查的事情:

  1. 检查你的视图层次结构 – 东西是放在你的UITableView顶部,导致它不接收一个水龙头?
  2. 你的UITableViews在任何地方被禁用? 我将在tableView:didSelectRowAtIndexPath:设置一个断点tableView:didSelectRowAtIndexPath:并查看是否正在调用该方法。
  3. 检查这个职位

我想这些不是肯定的答案,但希望他们会帮助发现问题!

尝试设置

 self.scrollView.delaysContentTouches = YES; self.scrollView.canCancelContentTouches = NO; 

也许UIScrollView不会将触摸信息传递给子视图。

我试图使用基本的Interface Builder来重现您的需求的简化版本,在我看来它正在使用基本的编码和使用默认设置。 你能否请检查我的快速肮脏的Github回购,并要求回答是否适用于您的情况或缺less什么。

https://github.com/codedad/SO_ScrollView_with_Tables

默认情况下,Interface Builder创buildUIScrollView和UITableViews,以启用:

  • 延迟内容打开
  • 可取消内容触及

这对我有效

我编程添加tableView到我的滚动视图使用addSubview:

UIGestureRecognizerDelegate是必需的。

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if ([touch.view isDescendantOfView:self.signUpJammerList]) { return NO; } return YES; }