是否可以在自动调整大小的单元格中使用自动调整大小的单元格?
Is it possible to use self sizing cells within self sizing cells?
我想在带有自动调整单元格的表格视图中拥有自动调整单元格。但是在第一次初始化时,一些单元格是不正确的。滚动到底部后,单元格将再次显示单元格大小正确。在屏幕截图中,您可以看到前 2 个单元格底部有一个白色 space,而第三个单元格没有。他们应该都像第三个。
这是我的主要项目中的问题。
Screenshot
您不应该将 UITableView
包装到 UITableViewCell
中,请尝试使用 UITableView
Sections
来为您的 UITableView
添加额外的深度级别。
在自动调整大小的单元格内自动调整单元格大小的问题有点棘手,因为您必须了解它是如何工作的。 UITableView
大部分时间都使用估算值。它通常不会精确计算contentSize
,因为要精确计算它,它必须首先实例化每个单元格,对其进行布局,然后计算其大小。
仅为显示的单元格(在当前滚动框中可见)计算精确值。
棘手的部分是在显示外部单元格之前不会显示内部单元格(在外部单元格内),因此外部单元格的大小计算不正确。另请注意,除非明确说明,否则 UITableView
不会自动更新单元格高度。
如果您确实必须这样做,解决方案是在显示之前正确计算外部单元格的高度并手动设置高度限制。
如果您知道身高(来自数据源),就很容易了。如果你真的需要计算内table的高度,你可以这样做:
// 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
或 table 部分。当您使用内部 table 视图时,内部 table 不会重用任何单元格,您的性能将受到影响。
我想在带有自动调整单元格的表格视图中拥有自动调整单元格。但是在第一次初始化时,一些单元格是不正确的。滚动到底部后,单元格将再次显示单元格大小正确。在屏幕截图中,您可以看到前 2 个单元格底部有一个白色 space,而第三个单元格没有。他们应该都像第三个。
这是我的主要项目中的问题。 Screenshot
您不应该将 UITableView
包装到 UITableViewCell
中,请尝试使用 UITableView
Sections
来为您的 UITableView
添加额外的深度级别。
在自动调整大小的单元格内自动调整单元格大小的问题有点棘手,因为您必须了解它是如何工作的。 UITableView
大部分时间都使用估算值。它通常不会精确计算contentSize
,因为要精确计算它,它必须首先实例化每个单元格,对其进行布局,然后计算其大小。
仅为显示的单元格(在当前滚动框中可见)计算精确值。
棘手的部分是在显示外部单元格之前不会显示内部单元格(在外部单元格内),因此外部单元格的大小计算不正确。另请注意,除非明确说明,否则 UITableView
不会自动更新单元格高度。
如果您确实必须这样做,解决方案是在显示之前正确计算外部单元格的高度并手动设置高度限制。
如果您知道身高(来自数据源),就很容易了。如果你真的需要计算内table的高度,你可以这样做:
// 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
或 table 部分。当您使用内部 table 视图时,内部 table 不会重用任何单元格,您的性能将受到影响。