UIScrollView 内的 UITableView - 单元格不可点击

UITableView inside UIScrollView - Cell not clickable

我遇到了 UITableView 未检测到触摸的问题。

在 iPhone-only 应用程序中,我有一个 UIViewController,其中包含:

标签具有动态高度,因为它们包含一些我必须从网络上检索的文本,所以我使用自动布局。 我在 viewDidLayoutSubviews 方法中设置 UIScrollView 的内容大小,我通过对 UITableView.frame.origin.y 和它的高度求和来做到这一点。

问题来了:当标签只包含一些文字并且UITableView不超过iPhone屏幕尺寸时,一切正常。但是当它们变大并且 UITableView 被下推时,当我向下滚动时我不能再点击单元格了。另外,如果在加载视图时 table 一半可见,一半不可见,我可以单击可见单元格,但如果我向下滚动,则无法单击其他单元格。

我正在使用 swift 2 和 Xcode 7。

这是一个例子:

可点击:

无法点击:

在此处向 @Rémy Virin's 答案添加一些信息:

根据 Apple 文档,您不应在 UIScrollView 中嵌入 UITableView。

Important: You should not embed UIWebView or UITableView objects in UIScrollView objects. If you do so, unexpected behavior can result because touch events for the two objects can be mixed up and wrongly handled.

补充:解决方案 因为你也想滚动上面的内容table,一个解决方案是放置一个Header View 用于 Table 并将内容放在那里,使其沿 Table 视图滚动。

如果您使用 Autolayout,则无需指定 contentSizeUIScrollView,因为它会自动根据其子视图的高度展开。

在您的情况下,当 tableView height 增加时,增加容纳 tableView 的 Base UIView(您提到的内容视图)的高度。

UITableView 当它延伸到其容器视图下方时变得无响应。

执行以下操作:

yourView.clipToBounds = true

现在,如果 UITableView 没有出现意味着你的 UIView 不一样大,无法按住 UITableView

确保你的 UIView 高度更大以容纳其中的内容,然后尝试点击它。

Updated:

如果您正在使用 AutoLayout,请执行以下操作。

  1. 将固定高度给UIView
  2. UIView
  3. 高度约束的出口
  4. 现在,在 viewDidLayoutSubviews 中将 UIView 的约束更改为 UITableView contentSize 高度。

    self.heightConstraint = self.tableView.contentSize.height

如果有帮助,请告诉我!