自动调整嵌入在 UITableView 中的 UICollectionView 单元格不起作用

Posted

技术标签:

【中文标题】自动调整嵌入在 UITableView 中的 UICollectionView 单元格不起作用【英文标题】:Autosizing UICollectionView cell embedded in UITableView not working 【发布时间】:2019-03-05 10:39:16 【问题描述】:

我已经花了几天时间尝试各种 SO 帖子中建议的内容,但无法弄清楚这一点。我可能正在寻找正确的问题!

我正在从 android 切换到 ios,但似乎在使用自动布局时遇到了一些问题。具体来说,让 UICollectionView 调整到其内容的高度。每个集合视图可以根据其内容具有不同的单元格大小,但给定行上的每个项目的单元格大小将相同。

UICollectionView 嵌套在 UITableViewCell 中。 UITableViewCells 似乎正在正确调整其内容高度,并查看 Debug View Hierarrchy 问题似乎是 UICollectionView。

我创建了一个迷你演示并将其放在这个 github 上(链接如下)。我扔了一堆测试数据,所以 ViewController VC 的底部有点乱。该演示只是说明每行如何具有不同的内容大小。可以有多个相同样式的表格行。

注意:我必须在 CategoryRowCell.swift 中添加以下行才能获得以下屏幕截图。没有这条线,UICollectionView 高度变为 0!

...
collectionView.heightAnchor.constraint(equalToConstant: 250)
...

GitHub link

这就是它现在的样子..

向下滚动

注意水平列表顶部和底部的间隙。这是我所期待的..

这是调试视图层次结构的一部分。您将看到集合视图已经有顶部和底部边距(很好),但是红线显示了应用于集合视图的多余高度。绿线表示我期望的高度。我希望集合视图具有其内容的高度。

【问题讨论】:

【参考方案1】:

我认为最好反过来做,将 UICollectionView 作为父级,将 UITableView 作为子级。因为第一个更灵活且可定制。

无论如何,对于您的情况,我认为您需要看两件事:

1- 为了更好地控制单元格大小,您可以将此函数用于 UICollectionView:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize  

  // The desired size based on the value at that row (the name for example)

  if objects[indexPath.row].name == "some condition" 
    return CGSize(width: 150, height: 50)
  
  else 
    return CGSize(width: UIScreen.main.bounds.width, height: 75)
  



2- UICollectionView 和 UITableView 的大小检查器值(其中之一可能有一些额外的间距)

【讨论】:

我的印象是 UITableView 只能垂直滚动?至于您的两个建议,我之前曾尝试使用该 sizeForItemAtIndexPath 方法,但鉴于我希望高度是动态的,它没有任何效果。此外,表格视图中的所有项目都是以编程方式创建的,因此没有大小检查器。 sizeForItemAtIndexPath 在高度是动态的情况下实际上很有用,只需在函数中设置您的条件并基于此返回大小。我用一些代码更新了答案。 感谢您的更新。这实际上是我的后备解决方案。我希望有一种解决方案可以自动检测内容大小并根据内容调整集合视图的高度。我猜没有现成的解决方案可以做到这一点!? 据我所知,没有直接的解决方案,但您也可以使用 UICollectionViewFlowLayout 来实现这一点(有用的文章:medium.com/@andrea.toso/…) 感谢您的帮助。我已经根据 sizeForItemAtIndexPath 中的内容类型对值进行硬编码。稍后可能会回到这个问题,看看是否有“动态”解决方案。

以上是关于自动调整嵌入在 UITableView 中的 UICollectionView 单元格不起作用的主要内容,如果未能解决你的问题,请参考以下文章

带有范围栏的 UITableView 上的 UISearchBar 在其他 UI 项上调整自身大小

嵌入在 UICollectionViewCell 中的自定尺寸 UITableView

iPad - 带有 UITextField 的 UITableView - 方向改变时自动调整大小问题

使用自动布局的 UITableView 中的动态 UITextView 高度?

在自动调整 TextView 大小时输入文本时 UITableView 闪烁/口吃

UITableview 没有在 iOS 中使用自动布局调整大小