我正在使用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“不知道”最后一个单元格在哪里。
将不胜感激。
谢谢
更新:2015年6月24日
自iOS 9.0 SDK以来,Apple已解决了大多数此类错误。从iOS 9 beta 2开始,所有问题均已修复,包括滚动到没有动画的表格视图的顶部和底部,以及在表格视图reloadData的中间滚动时调用。
reloadData
以下是尚未解决的其余问题:
针对与动画滚动有关的这些问题,已提交了新的错误报告(rdar:// 21539211)。
原始答案
这是一个带有表格视图行高估算值的Apple bug,自从iOS 7首次引入此功能以来就存在。我直接与Apple UIKit工程师和开发人员就此问题进行了合作-他们承认这是一个错误。错误,但没有任何可靠的解决方法(缺少禁用行高估算),并且似乎对其修复没有特别的兴趣。
请注意,该错误以其他方式表现出来,例如,当您reloadData在部分或完全向下滚动(例如contentOffset.y,明显大于0)滚动时调用时,表格视图单元格消失了。
contentOffset.y
显然,对于iOS 8自定义单元,行高估算至关重要,因此Apple确实需要尽快解决这一问题。
我在2013年10月21日以Radar#15283329的形式提交了此问题。 请提供重复的错误报告,以便Apple优先解决问题。
您可以附加这个简单的示例项目来演示该问题。它直接基于Apple自己的示例代码。