【问题标题】:UITableView scrolling problems when inside a UIScrollViewUIScrollView 内的 UITableView 滚动问题
【发布时间】:2013-08-01 04:49:53
【问题描述】:

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

但是,有些表格不接收滚动手势。通常第一个确实表现良好,但其他的则不然。我无法选择单元格,也无法上下滚动表格。

我使用 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;
}

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

提前致谢!

【问题讨论】:

    标签: iphone ios uitableview uiscrollview scroll


    【解决方案1】:

    这对我有用

    我使用 addSubview: 以编程方式将 tableView 添加到我的滚动视图中

    需要UIGestureRecognizerDelegate

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

    【讨论】:

      【解决方案2】:

      我会检查的事情:

      1. 检查您的视图层次结构 - 是否有东西放置在您的 UITableView 之上,导致它无法接收点击?
      2. 您的 UITableViews 是否在任何地方被禁用?我会在tableView:didSelectRowAtIndexPath: 中设置一个断点,看看是否正在调用该方法。
      3. 检查this post

      我猜这些不是肯定的答案,但希望它们能帮助发现问题!

      【讨论】:

      • 嗯,我没有其他意见。层次结构目前是这样的: UIView - UIScrollView --- UIView ----- UITableView 但是,你是对的...... tableView:didSelectRowAtIndexPath 在“尝试”滚动期间没有被调用。但我没有禁用它(至少是故意的)。知道为什么它会被禁用吗?
      • 是否为您的 UITableViews 调用了任何委托/数据源方法?
      • 是的,我为每个 UITableView 都有一个 UIViewController,它既是表的委托又是数据源。
      • 我前段时间偶然发现了这个答案,但实际上我不记得检查 UITableView 是否超出了 UIScrollView 的限制。我会检查并回复。谢谢!
      • 欢迎。乐于助人。
      【解决方案3】:

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

      https://github.com/codedad/SO_ScrollView_with_Tables

      默认情况下 Interface Builder 创建 UIScrollView 和 UITableViews 启用:

      • 延迟内容触摸开启
      • 可取消内容已开启

      【讨论】:

      • 谢谢!我会试试这个并回复你! :-)
      • 我没有在我的示例中为所有表使用单独的视图控制器,因为一个视图控制器充当所有表的数据源就足够了,因为您可以在 cellForRowAtIndexPath 和 numberOfRowsInSection 中使用“tableView”参数来区分各种表格。
      • 好吧,看来您和@hw731 都是正确的,因为在您的示例和 hw371 发布的链接中,不同之处在于 UITableView 的大小。我的表格太大了几个像素,而在您的示例中它们正确匹配,这似乎是我的代码的问题。 :-) 非常感谢!
      • 不客气! ;) 总是希望具体的工作代码对其他人有更多帮助。如果您可以投票赞成这个答案,这可能表明其他人也可以检查示例。谢谢!
      • 没问题!太糟糕了,我不能将两者都标记为选定的答案。 ;)
      【解决方案4】:

      尝试设置

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

      也许 UIScrollView 没有将触摸信息传递给子视图。

      【讨论】:

      • 我通过界面生成器尝试了该解决方案,但没有奏效。我应该在代码中这样做还是一样?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 2019-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      相关资源
      最近更新 更多