使用`estimatedRowHeight`和`UITableViewAutomaticDimension`时,`moveRowAtIndexPath:toIndexPath:`中的UITableViewCell动画错误

Tim*_*ber 8 animation objective-c uitableview ios

当使用moveRowAtIndexPath:toIndexPath:移动a时UITableViewCell,我在使用时看到动画故障estimatedRowHeight,UITableViewAutomaticDimension当单元格从可见状态动画到不可见状态时.

如果我通过实现明确设置单元格的高度,问题就会消失tableView:heightForRowAtIndexPath:.仅当源索引路径和目标索引路径分别可见且不可见时,才会出现此问题.当单元格移动到另一个可见索引路径时,动画将按预期运行.

我已经创建了一个示例项目来说明效果:https://github.com/timarnold/Table-Cell-Sizing-Bug

http://www.openradar.me/19156703

编辑

@rdelmar指出我的问题实际上并没有问一个问题.

有没有人知道解决这个bug的方法并修复这种行为?或者我做错了什么?

编辑2014-12-08

我使用Apple提供的一个开发人员支持票来询问Apple的这个问题.他们证实这是一个错误(请访问http://www.openradar.me/19156703),并没有提供任何解决方法.

car*_*rso -2

蒂姆,

这不是一个明确的答案,而是一些有趣的发现。我相信您遇到的行为不是错误,而是与 iOS 在设备屏幕上绘制单元格的方式有关。更具体地说,是屏幕外的单元格。因为,数据源不受单元格重新排序的影响,iOS 会丢失单元格位置。

为了使我的观点更清楚,我对以下内容进行了修改TableViewController.m

didSelectRowAtIndexPath

[tableView moveRowAtIndexPath:indexPath
                          toIndexPath:[NSIndexPath indexPathForRow:indexPath.row-3 inSection:indexPath.section]];
Run Code Online (Sandbox Code Playgroud)

cellForRowAtIndexPath

cell.textLabel.text = [NSString stringWithFormat:@"%ld", indexPath.row + 1];
Run Code Online (Sandbox Code Playgroud)


您将看到单元格仅在移动到屏幕视图之外的位置时才会出现异常行为。此外,每次移动屏幕时,单元格都会重新绘制。