只有第一个collectionViewCell才会对用户互动做出反应

时间:2017-10-24 16:47:39

标签: ios swift

设置

我有一个相当复杂的视图层次结构,这使我使用tableViewscollectionViews做了很糟糕的事情。现在,我定制分组TableView,其中包含自定义TableCells. TableCell本身包含一些视图和Collection View.表格单元格的高度是基于on data数据源中的项目数。在创建table cell时创建一个collection view,其计算大小适合必要的数据。

- UITableView

---- UITableViewCell

------ UICollectionView

--------- UICollectionViewCell

问题

我遇到了自定义collectionViewCell的异常问题。我有一个垂直的单列collectionView,具有动态数量的单元格。理想情况下,点击单元格应该调用didSelectItemAt。该单元格还有三个按钮。点击按钮应该触发一些动作。所有期望的功能仅适用于第一个单元。其余的细胞对任何动作都没有反应。

看起来很奇怪的事情

默认情况下,collectionView内部tableViewCell的滚动被禁用,因为它基于所计算的高度基本适合所有内容,并且不需要滚动。 (我也不希望它干扰tableView滚动逻辑)。

第一

我试图对collectionView的高度硬编码一些值并启用滚动。发生的事对我来说是一个谜。

我们假设collectionView显示所有内容而不是滚动所需的计算高度为740。当我手动将它设置为280时(这足以让2个单元适合)并且启用滚动我的第一个单元格仍在工作,但是当我滚动收集时,我的第二个单元格开始正常运行同样。当我滚动回到collectionView的顶部时,它再次被禁用。

所以看起来当滚动启用并且由于高度不足以适合内容而实际发生时,单元格表现得如此。只要我将collectionView的高度设置为足以适合其内容,就会出错。

第二

在某些情况下,我实际上可以点击第二个单元格,它将调用该委托。但奇怪的是,当我点击单元格的顶部区域时,它就可以工作,就像从顶部开始的那样。细胞的其他区域没有反应,集合中的其他细胞也是如此。

启用滚动的工作代表和按钮会强制认为这与延迟或取消的触摸无关。 collectionView的框架和表格单元格的高度也可以正确计算。

xCode 8.3,iOS9 +

1 个答案:

答案 0 :(得分:0)

当我创建tableViewCell时,我将集合的高度硬编码为214的值。原因很简单。我以编程方式创建一个单元格,并以编程方式创建tableViewCells单元格的高度始终为44.当您覆盖init(style: UITableViewCellStyle, reuseIdentifier: String?)

你需要硬化高度,或者在cellForRowAtIndexPath中更新它。即使我在填充数据时更新了collection帧,但此collection的容器视图未更新,从而导致某些用户交互的剪切区域。