【问题标题】:Is it possible to use self sizing cells within self sizing cells?是否可以在自定尺寸单元中使用自定尺寸单元?
【发布时间】:2019-05-10 10:00:16
【问题描述】:

我想在带有自定尺寸单元格的表格视图中拥有自定尺寸单元格。但是在第一次初始化时,一些单元格不正确。滚动到底部后,单元格将再次显示,单元格大小是正确的。在屏幕截图中,您可以看到顶部 2 个单元格在底部有一个空白,而第三个则没有。它们都应该看起来像第三个。

这是我的主要项目中的问题。 Screenshot

【问题讨论】:

  • 为什么不使用部分?
  • @DeryckLucian 好的,也许我的解释并不完全清楚。请参阅我新添加的屏幕截图。我想在 tableview 中有额外的 tableview 深度。
  • 你可以使用 UITableView 部分来增加额外的深度
  • 您可以改为在tableViewCell 中创建collectionView。解决方法可以参考medium.freecodecamp.org/…。如果您想在tableViewCell 中使用tableView,您也可以采用相同的方法。如果您需要任何帮助,请告诉我。
  • @PGDev 您的示例具有相同的问题,即单元格大小在初始化时不正确,并且在将单元格滚动到视图外并将其滚动回内部后正确。

标签: ios swift uitableview uitableviewautomaticdimension


【解决方案1】:

在自动调整大小的单元格中自动调整单元格大小的问题有点棘手,因为您必须了解它的工作原理。 UITableView 大部分时间都使用估计值。它通常不会精确计算contentSize,因为要精确计算它,它必须首先实例化每个单元格,对其进行布局,然后计算其大小。

仅为显示的单元格计算精确值(在当前滚动框架中可见)。

棘手的部分是内部单元格(在您的外部单元格内)在显示外部单元格之前不会显示,因此外部单元格的大小计算不正确。另请注意,UITableView 不会自动更新单元格高度,除非明确说明这样做。

解决方案,如果你真的必须这样做,是在显示之前正确计算外部单元格的高度并手动设置高度约束。

如果您知道高度(来自数据源),那就很容易了。如果你真的需要计算内表的高度,你可以这样做:

// make the table high enough to display all cells
innerTableHeightConstraint.constant = 2000
// reload table
innerTable.reloadData()
// force layout
innerTable.layoutIfNeeded()
// now the contentSize is correctly calculated
innerTableHeightConstraint.constant = innerTable.contentSize.height

整个概念很棘手,理想情况下,您应该更喜欢使用UICollectionView 或表格部分。当您使用内部表格视图时,内部表格不会有任何单元格重用,您的性能会受到影响。

【讨论】:

  • 在viewDidLoad()中你调用这段代码的方法是什么?
  • @BasM 在tableviewcell里面,每次改变数据源都会影响高度。在跳到代码之前,请确保您理解上面的长文本。
  • 你的意思是在 cellForRowAt 里面?
【解决方案2】:

您不应该将UITableView 包装成UITableViewCell,而是尝试使用UITableView Sections 来为您的UITableView 添加额外的深度级别。

【讨论】:

  • 我已经使用了这些部分,如果您真的需要额外的深度,您有什么建议?
  • 实际上似乎您使用一个部分作为单元格,您可以使用多个部分来获得相同的行为
猜你喜欢
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
  • 2017-03-24
  • 2014-12-04
  • 2017-09-07
相关资源
最近更新 更多