ios – UITableView的deleteRowsAtIndexPaths的不规则动画:withRowAnimation:

概要:
在编辑模式下,我使用自定义编辑控件删除表视图中的行,而不是认的红色减号和删除确认按钮.勾选一行或多行,然后点击工具栏中的删除按钮.它类似于在邮件应用程序中看到的行为.请参阅下面的截图.

问题:
通过调用deleteRowsAtIndexPaths:withRowAnimation产生的动画是不规则的.例如,下面是当我使用底部行动画(即UITableViewRowAnimationBottom)删除屏幕截图中勾选的行(主题#7)时会发生什么:

主题#8在主题#7下方和后方滑动
主题#8被短暂隐藏在主题#7之后
主题#8替代主题#7

这是在模拟器和设备上发生的.当删除上述Subject#7时,自动动画类型(即UITableViewRowAnimationAutomatic)产生相同的不规则行为.

顶级动画类型在模拟器中按预期方式工作,但对设备产生不一致的刺激动画.

褪色类型动画是唯一可以在模拟器和设备上按预期工作的动画.

细节:

我的目标是iOS 7,并使用故事板,纯自动布局和核心数据.

以下是我删除行的操作方法

- (void)deleteButtonTapped:(UIBarButton *)sender
{
    // update table view's data
    [self.listofItems removeObjectsAtIndexes:self.indexSetofTickedRows];

    // create index paths for ticked rows
    NSMutableArray *indexPaths = [[NSMutableArray alloc] init];

    [self.indexSetofTickedRows enumerateIndexesUsingBlock:^(NSUInteger idx,BOOL *stop) {
        [indexPaths addobject:[NSIndexPath indexPathForRow:idx inSection:0]];
    }];

    [self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationBottom];

    // update Core Data and UI...
}

我试过的

表单元格子类覆盖layoutSubviews.但是,即使我发表了layoutSubviews的注释,这些不规则动画仍然存在.

我还从表格单元格中删除自定义的可编辑编辑控件,然后硬编码了action方法中特定行的删除.不规则动画持续存在.

正如其他人所建议的,我尝试调用deleteRowsAtIndexPaths:withRowAnimation:在调用beginUpdates和endUpdates之间.这不能解决问题.

关于下一步做什么的建议,或者最好的猜测为什么我看到这些不规则的动画?

更新(iOS 7.1):

问题依然存在于iOS 7.1之后.将继续依靠淡化动画.

解决方法

尝试打电话 [self.listofItems removeObjectsAtIndexes:self.indexSetofTickedRows]; 在功能的结尾,而不是在开始.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...