UITableViewCell

时间:2016-11-20 04:49:44

标签: ios objective-c iphone uitableview uicollectionview

我已经使用本教程将一个collectionView放在UITableView中。 https://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell-in-swift/

UITableViewController是dataSource&代表UITableView&每个单元格中的不同集合视图。 问题是我想动态隐藏CollectionView,并在collectionview为空时将其高度更改为0。 为此,我在CellForRowAtIndexPath

中有这个代码
if (patients.paraclinicImage.count == 0){
    [cell.collectionView setHidden:true];
    cell.collectionViewHeight.constant = 0;
} else {
    [cell.collectionView setHidden:false];
     cell.collectionViewHeight.constant = 80;
}

通过使用此代码,collectionView最初正确显示。但是,当快速滚动时,我有时会使用正确的单元格高度加载单元格,但是集合视图将为空。刷新单元格可以解决此问题。删除上面的代码行也解决了这个问题。

以下是两张图片,显示了第一次渲染时以及多次滚动(以及单元格的重新渲染)后单元格的外观。

  

滚动前问题如下图所示

Before scrolling

  

但滚动后的问题似乎就像下面一样

After scrolling 我很感激你们的任何想法。

The debug view hierarchy showing an empty collectionView with an appropriate cell height

  

调试视图层次结构,显示具有适当单元格高度的空collectionView

2 个答案:

答案 0 :(得分:0)

这是因为快速滚动时不会更新单元格高度。 UITableView缓存indexPath的行高只是为了计算滚动区域。您需要正确设置约束并使用heightForRowAtIndexPath:方法调整单元格的高度。

heightForRowAtIndexPath:内应用逻辑,您的问题将得到解决。

快乐编码!!

答案 1 :(得分:0)

我有同样的问题。有时,我在tableviewcell中的集合视图不会显示collectionview单元。我通过在主线程上调用collectionView重新加载来解决它。我不完全知道原因,因为我在每个单元格上都有许多后台调用,并且正在主线程本身上重新加载tableview。尽管如此,还是必须在主线程上重新加载collectionview。

DispatchQueue.main.async {
    cell.colViewProperties.reloadData()
}