使用moveRowAtIndexPath:toIndexPath:
移动UITableViewCell
时,我在使用estimatedRowHeight
和UITableViewAutomaticDimension
时看到动画故障,当细胞从可见状态动画到一个不可见的状态。
如果我通过实施tableView:heightForRowAtIndexPath:
明确设置单元格的高度,问题就会消失。仅当源索引路径和目标索引路径分别可见且不可见时,才会出现此问题。当单元格移动到另一个可见索引路径时,动画将按预期运行。
我已经创建了一个示例项目来说明效果:https://github.com/timarnold/Table-Cell-Sizing-Bug
http://www.openradar.me/19156703
有没有人知道解决此错误并解决此问题的方法?或者我做错了什么?
我使用Apple提供的一张开发人员支持服务单来向Apple询问此问题。他们确认这是一个错误(访问http://www.openradar.me/19156703来欺骗)并且没有提供任何解决方法。
答案 0 :(得分:1)
尝试缓存单元格高度。
private var cellHeights = [NSIndexPath: CGFloat]()
override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if let cachedHeight = cellHeights[indexPath] {
return cachedHeight
} else {
return 60
}
}
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
cellHeights[indexPath] = cell.frame.height
}
答案 1 :(得分:-2)
添
这不是一个明确的答案,而是一些有趣的发现。我相信您遇到的行为与iOS在设备屏幕上绘制单元格的方式有关,而不是错误。更具体地说,对于离开屏幕的细胞。因为,数据源不受重新排序iOS的单元格影响,无法跟踪单元格位置。
为了使我更清楚,我对TableViewController.m
进行了以下修改:
在didSelectRowAtIndexPath
[tableView moveRowAtIndexPath:indexPath
toIndexPath:[NSIndexPath indexPathForRow:indexPath.row-3 inSection:indexPath.section]];
在cellForRowAtIndexPath
cell.textLabel.text = [NSString stringWithFormat:@"%ld", indexPath.row + 1];
只有当移动到屏幕视图之外的位置时,您才会看到单元格行为异常。此外,每次移动屏幕时都会重新绘制单元格。