13

更新:现在在 iOS 8.0 及更高版本中已修复。有关详细信息,请参阅我接受的答案。

我有一个 iOS 7 UITableView,我允许在行上滑动删除。我正在处理以下内容的删除:

tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

和:

[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];

所有行都使用正确的动画删除,除了表中的最后一行。当用户滑动以显示删除按钮,然后点击它时,单元格完全滑出屏幕左侧,但留下一个白色单元格,删除按钮仍在其上的十分之几秒,然后突然消失。似乎所有单元格都发生了这种情况,但所有其他单元格下方都有一行向上滑动,将其覆盖。

当有问题的行是表中唯一的行时,甚至会发生这种情况,我删除整个部分而不是仅删除行。部分标题滑入遗忘,但带有删除按钮的白色单元格会停留一段时间。

我希望最后一个单元格具有与其他单元格相同的 UITableViewRowAnimationTop 动画。有什么想法吗?

4

5 回答 5

4

更新:此错误已在 iOS 8 中得到纠正。最后的单元格删除现在滑向左侧,删除按钮向上滑开,背景清晰(动画完成后不再有白色区域突然消失)。在 iOS 8 以下运行时,仍然需要下面的 iOS 7 修复。

iOS 7 修复:我能够通过在表的末尾添加另一个具有足够高的部分标题视图的部分来纠正此问题。这个标题视图的样式看起来像表格底部的空白区域,所以你看不到它在那里。当表格的最后一行被删除时,这个空白部分的标题会向上滑动并覆盖它,隐藏卡在那里的删除按钮。这有点 hack,但它看起来像是一个表格视图错误。

于 2014-01-09T23:33:42.567 回答
1

作为 Frank Li 提到的 keep-an-empty-row 技巧的替代方法,我通过简单地删除最后一行的特殊情况来解决这个丑陋的故障:而不是动画单元格,只需调用 -reloadData on表视图。

您不会看到任何动画,但也不会看到故障,因此您的表格视图不会看起来损坏。一个值得的权衡。

于 2014-01-09T21:53:51.583 回答
1

我的解决方案是通过隐藏正在删除的单元格来简单地禁用损坏的动画。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.hidden = YES;
}
于 2014-06-03T20:40:57.887 回答
0

我认为一种解决方法是始终在表格视图的最后一行下方保持一个空行。那会成功的。

于 2013-12-22T08:10:06.657 回答
0

您还可以使用该UITableView.tableFooterView属性:

- (void)viewDidLoad
{
    [super viewDidLoad];

    ... 

    CGRect frame = [self.tableView rectForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
    UIView *view = [[UIView alloc] initWithFrame:frame];
    view.backgroundColor = self.tableView.backgroundColor;
    self.tableView.tableFooterView = view;
}

此代码进入持有UITableView.

  • 代码假定为 ARC。
  • 如果您为表格使用背景图像,情况就不同了。
  • 代码可以用“if (iOS > 7)”子句包围。
于 2014-01-14T14:29:52.850 回答