返回

《iOS 11:揭开estimatedRowHeight之谜,详解适配之路》

IOS

iOS 11 中 estimatedRowHeight 的作用

estimatedRowHeight 属性允许您指定 UITableView 在测量单元格高度之前要使用的估计值。这对于提高滚动性能非常有用,因为它可以防止 UITableView 在滚动时不断测量单元格的高度。

在 iOS 11 之前,UITableView 使用固定的行高来计算内容视图的大小。这在大多数情况下都很好,但对于具有动态内容的单元格,它可能会导致性能问题。例如,如果单元格包含大量文本或图像,则在滚动时 UITableView 需要不断测量单元格的高度,这可能会导致卡顿。

为了解决这个问题,iOS 11 引入了 estimatedRowHeight 属性。您可以将 estimatedRowHeight 设置为一个估计值,UITableView 将使用该值来计算内容视图的大小。这样,UITableView 在滚动时就不需要不断测量单元格的高度,从而提高了滚动性能。

为什么在使用 MJRefresh 等第三方库时需要将 estimatedRowHeight 设置为 0?

MJRefresh 是一个流行的第三方库,用于为 UITableView 和 UICollectionView 添加下拉刷新和上拉加载更多功能。在 iOS 11 中,如果您使用 MJRefresh,则需要将 UITableView 的 estimatedRowHeight 属性设置为 0。

这是因为 MJRefresh 使用自己的方法来测量单元格的高度。如果 estimatedRowHeight 属性不为 0,则 MJRefresh 将使用 estimatedRowHeight 属性的值作为单元格高度的估计值。这可能会导致 MJRefresh 无法正确测量单元格的高度,从而导致一些问题,例如下拉刷新或上拉加载更多功能无法正常工作。

因此,为了确保 MJRefresh 能够正常工作,您需要将 UITableView 的 estimatedRowHeight 属性设置为 0。

总结

estimatedRowHeight 属性是一个非常有用的属性,它可以提高 UITableView 的滚动性能。如果您使用的是 iOS 11,则您应该将 estimatedRowHeight 属性设置为一个合理的估计值。如果您使用的是 MJRefresh,则您需要将 estimatedRowHeight 属性设置为 0。

我希望这篇文章对您有所帮助。如果您有任何问题,请随时留言。