TableView 中的 UICollectionView 不填充单元格?

Posted

技术标签:

【中文标题】TableView 中的 UICollectionView 不填充单元格?【英文标题】:UICollectionView inside TableView not populating cells? 【发布时间】:2015-07-23 01:17:53 【问题描述】:

我有一个 tableView,其中的行需要水平流动的 collectionView。

我的 tableView 单元格中有一个 collectionView,然后我像这样实例化它们:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell: MyTableViewCell = tableView.dequeueReusableCellWithIdentifier("MyTableViewCell", forIndexPath: indexPath) as! MyTableViewCell
    let nibName = UINib(nibName: "CollectionCell", bundle: nil)
    cell.collectionView.registerNib(nibName, forCellWithReuseIdentifier: "CollectionCell")
    cell.collectionView.dataSource = self
    cell.collectionView.delegate = self

    return cell

我正在尝试使用自动高度表视图行,我认为这可能会导致问题。如何将 UITableViewAutomaticDimension 与内部集合视图一起使用?

【问题讨论】:

您可能需要在设置好委托和数据源后调用reloadData @Qazi 在 cellForRowAtIndexPath 中这样做了,没有效果。 对不起,我没说清楚,所以你在集合视图上调用reloadData,而不是在 TableView 上? @Qazi 是的。在集合视图上。 【参考方案1】:

这是在objective-c中,但对我有用:

我。在自定义单元格的 .m 文件中注册 UICollectionViewCell nib,并指定布局详细信息(大小、间距等)。

二。在持有 tableView 的 VC 中,其 .m 在cellForRowAtIndexPath中执行以下操作

 MyTableViewCell *cell = (MyTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"MyTableViewCellId" forIndexPath:indexPath];

    cell.collectionView.delegate = self;
    cell.collectionView.dataSource = self;
    cell.collectionView.tag = indexPath.row;

    [cell.collectionView reloadData];

三。您可以在委托方法中使用UICollectionView 的标签来填充正确的信息

这有帮助。

【讨论】:

我正在尝试使用自动高度表视图行,我认为这可能会导致问题。如何将 UITableViewAutomaticDimension 与内部集合视图一起使用? 这确实有效。你需要确保布局中的itemSize设置好了,并且当tableview设置为AutomaticDimension时,包含collection view的cell的autolayout约束指定了一个高度 @StefanKendall 你是绝对正确的,抱歉忘了包括那个..刚刚添加了答案【参考方案2】:

尝试添加 - cell.setTranslatesAutoresizingMaskIntoConstraints(false) - 见下文

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell: MyTableViewCell = tableView.dequeueReusableCellWithIdentifier("MyTableViewCell", forIndexPath: indexPath) as! MyTableViewCell
    let nibName = UINib(nibName: "CollectionCell", bundle: nil)
    cell.collectionView.registerNib(nibName, forCellWithReuseIdentifier: "CollectionCell")
    cell.collectionView.dataSource = self
    cell.collectionView.delegate = self
    cell.setTranslatesAutoresizingMaskIntoConstraints(false)

    return cell

有关更多信息,请参阅https://www.captechconsulting.com/blogs/ios-8-tutorial-series-auto-sizing-table-cells。

【讨论】:

以上是关于TableView 中的 UICollectionView 不填充单元格?的主要内容,如果未能解决你的问题,请参考以下文章

collectionView 和 tableView的嵌套使用

如何在 iOS swift 中的 ARSCNView 中显示 uicollection 视图

UITableViewCell内的UICollectionView如何根据屏幕大小调整tableview单元格高度

使用 UICollection 中的部分访问数据库

4.UiCollection API 详细介绍

UICollection 的镜像滚动