visibleCells返回tableViewCell中collectionView中的所有单元格

时间:2018-10-17 21:27:28

标签: ios swift uitableview uicollectionview

我创建了一个包含collectionView的custom UITableViewCell。此自定义单元格符合UICollectionViewDelegate和UICollectionViewDataSource协议并管理collectionView。

但是当我在tableView中使用此自定义单元格时,即使屏幕上只有3个单元格,我的collectionView的visibleCells属性也会返回所有20个单元格。

这导致我的collectionView不重用单元格的情况,因为它认为所有单元格在屏幕上都是可见的,并导致内存问题。

这是我在tableViewController中的实现:

override func viewDidLoad() {
    super.viewDidLoad()

    guard let bundle = Bundle(identifier: "org.cocoapods.*****") else { return }
    tableView.register(UINib(nibName: "CampaignCollectionViewContainerCell", bundle: bundle), forCellReuseIdentifier: "campaignContainerCellIdentifier")
}

.
.
.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "campaignContainerCellIdentifier") as? CampaignCollectionViewContainerCell else { fatalError() }
    return cell
}

我尝试更改visibleCells属性,但是它是仅获取的。

我想没关系,但是我的自定义UITableViewCell在一个私有容器中,而UITableViewController在我使用该容器的主项目中。

2 个答案:

答案 0 :(得分:0)

您是否返回了正确的数据 numberOfSectionsInCollectionViewnumberOfItemsInSection

答案 1 :(得分:0)

在将集合视图嵌入表视图单元格之前,我曾遇到过这个问题,这是您检查特定单元格是否对用户可见的解决方案

此解决方案适用于这种情况(嵌入式集合/表)

注意:您可以创建一个名为“ visibleCells”的数组,并在所有单元格上通过循环填充它,并在此数组中添加一个可见的数组:

let cellRect = YourCell.contentView.convert(YourCell.contentView.bounds, to: UIScreen.main.coordinateSpace)
if UIScreen.main.bounds.intersects(cellRect) {
     print("This cell is visible")
}