我有一个相当复杂的视图层次结构,这使我使用tableViews
和collectionViews
做了很糟糕的事情。现在,我定制分组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 +
答案 0 :(得分:0)
当我创建tableViewCell
时,我将集合的高度硬编码为214的值。原因很简单。我以编程方式创建一个单元格,并以编程方式创建tableViewCells
单元格的高度始终为44.当您覆盖init(style: UITableViewCellStyle, reuseIdentifier: String?)
你需要硬化高度,或者在cellForRowAtIndexPath
中更新它。即使我在填充数据时更新了collection
帧,但此collection
的容器视图未更新,从而导致某些用户交互的剪切区域。