iOS9 - UITableViewCellContentView 覆盖了 Cell 中的控件

iOS9 - UITableViewCellContentView is covering up Controls inside Cell

我制作了一个名为 "SwitchCell" 的自定义 UITableViewCell,它有一个开关。 在 iOS9 Only 中,使用 Xcode 7 beta,单元格中的内容视图位于开关的顶部。 (查看视图层次结构的屏幕截图。您可以清楚地看到单元格的内容视图位于其他视图之上。):

所以所有对 UISwitch 的触摸都被拦截,IBAction 不会触发。 在 iOS8 中,这不是问题。请参阅 iOS 8.4 模拟器的屏幕截图。您可以看到控件顶部没有内容视图:

有人遇到过这个问题吗? 我尝试从头开始重新制作 NIB,但出现了相同的结果。

我的 NIB 是一个自由尺寸的视图,没有状态栏。它有两个出口:一个用于 UILabel,一个用于 UISwitch。

编辑:请确保检查下面要求验证单元格的根视图不仅是 UIView 还是 UITableViewCell 的答案。这个问题也可能是这个的副作用。

经过更多的调查和搜索,我在这里找到了我的解决方案: Button in UITableViewCell not responding under ios 7

为我修复的是:

cell.contentView.userInteractionEnabled = NO;

这可以防止单元格内容视图接管触摸事件,即使它位于其他视图之上。

这个问题不仅发生在 iOS9 上,也发生在 iOS7 上。在 iOS8 中,内容视图位于控件后面。

问题可能出在您的单元格的 .xib 文件中。在单独的 .xib 中创建单元格时,请务必将 UITableViewCell 拖到 canvas, 而不是 UIView

我在将单元格重新用作 .xib 时遇到了这个问题。我没有意识到,但当我第一次创建 xib 时,它创建的默认视图实际上是 UIView 而不是 UITableViewCell。似乎在某个阶段 UIKit 将内容视图添加到我的其他元素之上,因此中断了某些事件(例如触摸事件)。

我通过打开我的 xib 文件并将 UITableViewCell 拖到 canvas 并将我的 UI 元素从旧视图复制到新单元格来解决这个问题。

之后,与 UITableViewCell.

匹配的属性检查器中的其他设置也变得可用

SWIFT

我有一个问题,我的自定义 tableviewcell swift 文件中的按钮工作正常,但后来我升级到 Xcode 12,然后突然我无法访问它们不再(意味着我的水龙头没有被识别)。单元格内容视图似乎干扰了层次结构,这救了我:

cell.contentView.isUserInteractionEnabled = false

我把这行放在 cellForRowAt 中。

感谢@FranticRock