UITableView 内的 CollectionView 单元格重复

Posted

技术标签:

【中文标题】UITableView 内的 CollectionView 单元格重复【英文标题】:CollectionView cell inside UITableView is repeating 【发布时间】:2017-10-24 08:48:27 【问题描述】:

我有一个表格视图,其中每个单元格都包含一个集合视图!

1) 在 collectionview 中只显示两个单元格,因为我的问题是当我们滚动 tableview 时,collectoinview 单元格内容在 tableview 的许多其他单元格中重复

我的代码:

let tags = Tblarr[indexPath.row]["hashtags"] as! [String]
    if tags.count != 0
    
        for var i in 0 ... tags.count - 1
        
            if i < 2
            
                cell.tagsView.addTag(tags[i])
                cell.collectionView.isHidden =   false
            
        
        if tags.count > 2
        
            cell.lblCount.isHidden = false
            cell.lblCount.text = "+\(tags.count - 2)"
        
        else
        
            cell.lblCount.isHidden = true
        
    
    else
        cell.lblCount.isHidden = true
        cell.collectionView.isHidden =   true
    
    cell.fillCollectionView(with: cell.tagsView.tags)
    cell.widthConstraint.constant = cell.collectionView.contentSize.width

这里我只得到固定宽度的collectionview,没有根据内容大小设置宽度&collectionview单元格在tableview的其他单元格中重复,即使单元格是一个,它也会显示2个单元格(滚动时)

第一次加载时

tableview 滚动时

//用于将数组从tableview存储到collectionview中

func fillCollectionView(with array: [String]) 
    self.collectionArr = array
    self.collectionView.reloadData()

【问题讨论】:

【参考方案1】:

在tableview中重新加载collectionView

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell cell.fillCollectionView.reloadData()

func fillCollectionView(with array: [String]) 
self.collectionArr.removeAll
self.collectionArr = array
self.collectionView.reloadData()

【讨论】:

fillCollectionView 是用于存储数组的函数,其中也重新加载了collectionview fillCollectionView(with array: [Your String]) 在 cellForRowAt indexPath 中调用这个方法 在重新加载集合之前,您必须清除 collectionView 数组列表 like 'func fillCollectionView(with array: [String]) self.collectionArr.removeAll() self.collectionArr = array self.collectionView.reloadData() '【参考方案2】:

我不知道fillCollectionView 做了什么,但看起来您没有考虑到表格视图单元格被重用了。因此,每次您拨打fillCollectionView 时,您都必须重置单元格的内容或内容或集合视图。

【讨论】:

如何重置它可以帮助更多@cldrr 尝试在let tags = Tblarr...之前调用cell.tagsView.tags = [] 单元格正在被重用,意味着对象本身可以包含以前使用的数据。

以上是关于UITableView 内的 CollectionView 单元格重复的主要内容,如果未能解决你的问题,请参考以下文章

如何增加 UItableviewcell 内的 UItableview 高度?

如何使表格滚动工作:UIControl 内的 UITableView 内的 UIControl

UIViewController 内的 UITableView? [关闭]

ScrollTo indexPath 在 Collection View Cell 内的 Collection View (Nested CollectionView)

如何从应用程序委托访问 uitabbarcontroller 内的 uinavigationcontroller 内的 uitableview?

UIScrollView 内的 UITableView