【问题标题】:Irregular animations from UITableView's deleteRowsAtIndexPaths:withRowAnimation:来自 UITableView 的 deleteRowsAtIndexPaths:withRowAnimation 的不规则动画:
【发布时间】:2013-10-28 18:33:19
【问题描述】:

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

问题: 调用deleteRowsAtIndexPaths:withRowAnimation: 生成的动画是不规则的。例如,当我使用底行动画(即UITableViewRowAnimationBottom)删除屏幕截图中勾选的行(主题#7)时,会发生以下情况:

  1. 主题 #8 在主题 #7 的下方和后面
  2. 主题 #8 短暂隐藏在主题 #7 后面
  3. 主题 #8 不和谐地替换主题 #7

这在模拟器和设备上都会发生。自动动画类型(即UITableViewRowAnimationAutomatic)在删除上面的主题 #7 时会产生相同的不规则行为。

Top 动画类型在模拟器中按预期工作,但在设备上产生不一致、不和谐的动画。

Fade 类型的动画是唯一在模拟器和设备上都能按预期工作的动画。

详情

我的目标是 iOS 7,并使用故事板、纯自动布局和 Core Data。

这是我删除行的操作方法:

- (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,不规则动画仍然存在。

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

根据其他人的建议,我尝试在调用 beginUpdatesendUpdates 之间调用 deleteRowsAtIndexPaths:withRowAnimation:。这不能解决问题。

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

更新(iOS 7.1):

针对 iOS 7.1 后问题仍然存在。将继续依赖淡入淡出动画。

【问题讨论】:

  • 我遇到了类似的问题,我得到了奇怪的动画,其中分隔线向一个方向移动,而单元格内容向另一个方向移动。我再次使用纯自动布局和 iOS7。对我来说似乎有问题。
  • 当线程未正确完成时,我已经看到了这种行为。那将是我首先要看的地方。
  • 您不需要致电beginend 更新吗?
  • 我有同样的问题有什么解决办法吗?
  • 哇,你有一个漂亮的界面@bilo.. 我知道这不是主题,但你能否分享一些关于你如何能够做到以下几点的资源:1)有一个可爱的黑色刻度图标,最好是图像源或其他东西; 2)您如何能够在每个单元格的右侧设置编辑选择选项,以便在其左侧显示一条漂亮的线条?而且,3)你是如何在底部创建那个漂亮的栏的,我假设每次你选择另一个单元格时都会自动更新,是使用工具栏和 didSelect 委托方法吗?也许你可以给我发电子邮件

标签: ios animation uitableview ios7


【解决方案1】:

尝试调用 [self.listOfItems removeObjectsAtIndexes:self.indexSetOfTickedRows]; 在函数的末尾而不是开头。

【讨论】:

    【解决方案2】:

    也许按照这里的建议设置单元格上的 alpha。不过不确定。 problems with animation when deleting the last row of a TableView in ios7

    【讨论】:

    • 你到底是什么意思?在您提到的帖子中,我没有看到任何提及 alpha 的内容。
    • 很抱歉。我的意思是参考上面的更新链接。它在某种程度上对我有用,因为即将被删除的单元格被隐藏了。这改善了我的动画,因为否则它看起来有点奇怪,因为我有不同高度的单元格。但显然设置 alpha 在 iOS6 中效果不佳。所以我将“隐藏”属性设置为“是”。
    【解决方案3】:

    尝试添加[tableView beginUpdates];[tableView endUpdates];

    【讨论】:

    • 不能解决问题。我已经得出结论,这是一个错误。现在,我正在使用淡入淡出动画,它的行为符合预期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多