一尘不染

iOS 8自动单元格高度-无法滚动到最后一行

swift

我正在使用iOS 8新的自动调整大小的单元格。外观上效果很好-每个单元格都有合适的大小。但是,如果我尝试 滚动到最后一行
,则表视图似乎不知道其正确大小。这是一个错误还是有解决办法?

重新创建问题的方法如下:

使用这个项目-TableViewCellWithAutoLayoutiOS8(从该SO答案引用),我按预期得到了自动调整大小的单元格。

但是,如果我要调用 scrollToRowAtIndexPath 函数,如下所示:

tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: model.dataArray.count - 1, inSection: 0), atScrollPosition: .Bottom, animated: true)

没有到达最后一行 -它只 能使 我绕到一半。

即使尝试使用这样的较低级别的函数,也是如此:

tableView.setContentOffset(CGPointMake(0, tableView.contentSize.height - tableView.frame.size.height), animated: true)

结果与预期不符,将无法解决。如果我单击多次或等待片刻,最终它将到达正确的位置。似乎tableView.contentSize.height的设置不正确,因此iOS“不知道”最后一个单元格在哪里。

将不胜感激。

谢谢


阅读 284

收藏
2020-07-07

共1个答案

一尘不染

更新:2015年6月24日

自iOS 9.0 SDK以来,Apple已解决了大多数此类错误。从iOS 9 beta
2开始,所有问题均已修复,包括滚动到没有动画的表格视图的顶部和底部,以及在表格视图reloadData的中间滚动时调用。

以下是尚未解决的其余问题:

  1. 当使用较大的估计行高时,滚动到带有动画的最后一行会导致表格视图单元格消失。
  2. 当使用较小的估计行高时,使用动画滚动到最后一行会导致表格视图过早完成滚动,从而在可见区域下方留下了一些单元格(最后一行仍在屏幕外)。

针对与动画滚动有关的这些问题,已提交了新的错误报告(rdar:// 21539211)。

原始答案

这是一个带有表格视图行高估算值的Apple bug,自从iOS 7首次引入此功能以来就存在。我直接与Apple
UIKit工程师和开发人员就此问题进行了合作-他们承认这是一个错误。错误,但没有任何可靠的解决方法(缺少禁用行高估算),并且似乎对其修复没有特别的兴趣。

请注意,该错误以其他方式表现出来,例如,当您reloadData在部分或完全向下滚动(例如contentOffset.y,明显大于0)滚动时调用时,表格视图单元格消失了。

显然,对于iOS 8自定义单元,行高估算至关重要,因此Apple确实需要尽快解决这一问题。

我在2013年10月21日以Radar#15283329的形式提交了此问题。 请提供重复的错误报告,以便Apple优先解决问题。

您可以附加这个简单的示例项目来演示该问题。它直接基于Apple自己的示例代码。

2020-07-07