行删除动画问题,滑动删除

时间:2013-12-25 21:51:26

标签: ios objective-c cocoa-touch uitableview

我正在使用滑动来删除我的一个使用自定义表格视图单元格的表格上的功能。我面临的问题是,当我点击“删除”按钮时,我看到一个奇怪的过渡,同时移除了单元格。

下面是我在“commitEditingStyle”中的代码,还可以看到我删除行时捕获的附件截图。

PS:我尝试过所有类型的行删除动画样式,但没有运气。

- (void)tableView:(UITableView *)iTableView commitEditingStyle:(UITableViewCellEditingStyle)iEditingStyle forRowAtIndexPath:(NSIndexPath *)iIndexPath {
    if (iEditingStyle == UITableViewCellEditingStyleDelete && iTableView == self.temporaryCartTable) {
        if (self.temporaryCartTable.frame.size.height == kMyAppCartTableViewExpandedHeight) {

            [self.temporaryCartTable beginUpdates];
            [self.temporaryCartTable deleteRowsAtIndexPaths:[NSArray arrayWithObjects: iIndexPath, nil] withRowAnimation:UITableViewRowAnimationAutomatic];

            MyAppCartInfo *aMyAppCartInfo = [self cart];

            if (([[aMyAppCartInfo.tempProducts allKeys] count] > iIndexPath.row) && [aMyAppCartInfo.tempProducts containsObjectForKey:[[aMyAppCartInfo.tempProducts allKeys] objectAtIndex:iIndexPath.row]]) {
                [aMyAppCartInfo.tempProducts removeObjectForKey:[[aMyAppCartInfo.tempProducts allKeys] objectAtIndex:iIndexPath.row]];
            }

            [self.temporaryCartTable endUpdates];
        }
    }
}

- (BOOL)tableView:(UITableView *)iTableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    return (iTableView == self.temporaryCartTable) ? YES : NO;
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)iTableView editingStyleForRowAtIndexPath:(NSIndexPath *)iIndexPath {
    return UITableViewCellEditingStyleDelete;
}

- (CGFloat)tableView:(UITableView *)iTableView heightForRowAtIndexPath:(NSIndexPath *)iIndexPath {

    if (iTableView == self.temporaryCartTable) {
        if (self.isTempCartCell)
            return 92.0;
        else
            return 58.0;
    } else {
        return 58.0;
    }
}

enter image description here

3 个答案:

答案 0 :(得分:0)

将以下方法实施添加到UITableViewDelegate

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView
          editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    return UITableViewCellEditingStyleDelete;
}

答案 1 :(得分:0)

使用[self.temporaryCartTable setRowHeight:xxx]而不是使用委托rowHeightAtIndexPath。在删除行并且表中没有其他行之后,将不会调用委托,并且将通过其属性检索表视图的行高(因此是默认高度)。另外,使用委托中的此方法会影响性能。

答案 2 :(得分:0)

如果其他人有这个,我的案例中的问题是heightForRowAtIndexPath:当单元格具有动态大小时,删除动画会表现得很奇怪。在我的情况下,解决方案是使用不同的方法,而不是花时间调查。但是你可以测试它并看到结果。为单元格指定固定高度:

self.tableView.rowHeight = Constant;

评论heightForRowAtIndexPath:。现在动画应该没问题了。

我知道这不是解决办法,但仍可以帮助某人。