UIView覆盖在UIScrollView上,如何防止UIScrollView滚动?

7
我有一个UITableView,每个单元格都有以下图像中的视图,在后台中有一个UIScrollView以及另一个视图。
UIScrollView包含多个图像,用户可以通过在表格单元格上向右或左滑动来查看它们,但由于第二个视图(红色区域)覆盖了UIScrollView,因此当我在该区域中滑动手指时,滚动不起作用。但是在红色区域的顶部,它很好地工作并且完美运行。
我在其他具有此功能的应用程序中看到了,即使单元格具有覆盖背景的其他视图,所有单元格高度中都可以滚动。
如果您能与我分享建议,我将不胜感激 :)

你是否将上方的视图作为子视图添加到了滚动视图中? - nilam_mande
你是添加代码还是使用Storyboard? - Kumar
6个回答

12

尝试在红色区域的视图上禁用 userInteraction,这将允许触摸穿过它。可以通过 storyboard 完成此操作,或者只需使用 view.userInteractionEnabled = false


1
但是如果我想要继续点击视图内部的按钮呢? - Ahemadabbas Vagh
@AhemadabbasVagh 如果您可以将按钮放在禁用交互的视图之外但在该视图之上,那将是最简单的解决方案,否则可能需要找出如何将触摸传递到响应者链而不是视图仅像正常情况下吸收它,我不确定如何立即做到这一点。 - Fonix

0
对我来说,问题在于视图不是UIScrollView的子视图。您可以通过在UIScrollView或父视图控制器类中的某个位置设置断点,并在调试器窗口中输入以下内容来检查此问题:
po myScrollView.subviews

然后检查输出,确保你的元素在子视图中。

0
    scrollView.isScrollEnabled = false

通过代码处理滚动。

func scrollToPage(page: Int) {
    var frame = scrollView.frame
    frame.origin.x = frame.size.width * CGFloat(page)
    scrollView.scrollRectToVisible(frame, animated: true)
}

0

将这行代码保留在ViewDidLoad方法中:

    [self.view setExclusiveTouch:YES];

如果这个方法不起作用,就将它添加到你的表视图中。

    [tableView setExclusiveTouch:YES];

否则,你可以在表视图单元格中添加滑动手势,并调用选择器来执行预期的操作。

0
将第二个视图作为第一个视图或滚动视图的子视图添加。
[scrollView addSubview:firstView];
[firstView addSubview:secondView];

-2
view.userInteractionEnabled = NO

1
虽然这段代码片段可能解决了问题,但包括解释真的有助于提高您的帖子质量。请记住,您正在为未来的读者回答问题,而这些人可能不知道您的代码建议原因。 - DimaSan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接