gpt4 book ai didi

iphone - 删除高度大于其他单元格的单元格时,动画看起来很尴尬

转载 作者:可可西里 更新时间:2023-11-01 03:33:57 25 4
gpt4 key购买 nike

我有一个普通的 UITableView,它有 4 行,每行高度为 50。当我按下第四行时,我使用 UITableViewRowAnimationTop 插入了高度为 80 的第五行。到目前为止,还不错。

再次按下第四行时,我想删除第五行。但是,当我使用 UITableViewRowAnimationTop(或与此相关的任何其他动画样式)删除行时,动画看起来很尴尬——动画开始了,但单元格在动画完成之前突然消失了。 (这仅在您使用具有背景颜色的单元格时才明显。您可以看到单元格的下半部分突然消失,而不是消失在其上方的单元格下方。)

代码是这样的:

[self.tableview beginupdates];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];
[self.tableview endupdates];

行高由 tableView:heightForRowAtIndexPath: 方法提供。

当所有行的高度相同,或者当被删除的行比其他行短时,不会出现此问题。

我认为一种解决方法是在删除第五个单元格之前将其高度更改为 50,但我不想那样做。请帮忙

最佳答案

我今天早上刚遇到这个问题。基本上,我最终自己处理了动画,然后在动画完成后删除了单元格。下面是一些代码来展示我是如何做到的:

@property (nonatomic, strong) NSArray *tableData;
@property (nonatomic, strong) NSMutableDictionary *deletedItems;
...

- (void)deleteItemForCell:(UITableViewCell *)cell
{
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
NSObject *item = self.tableData[indexPath.row];

NSNumber *rowKey = @(indexPath.row);

__weak id weakSelf = self;
[CATransaction setCompletionBlock:^{
@synchronized(weakSelf) {
[self.deletedItems removeObjectForKey:rowKey];
[self.tableData removeObject:item];
[self.tableView deleteRowsAtIndexPaths:@[indexPath]
withRowAnimation:UITableViewRowAnimationNone];
}
}];
self.deletedItems[rowKey] = item;

[self.tableView beginUpdates];
[self.tableView endUpdates];

[CATransaction commit];
}

- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (self.deletedItem[@(indexPath.row)]) {
return 0;
}
return CELL_HEIGHT;
}

代码跟踪数据结构中删除的项并通知表更新。已删除数据结构中的任何项目的高度都将为 0,这将导致“折叠”动画。

该代码利用 CATransaction 来了解动画何时完成。完成后,该项目将从 tableData 数据结构中删除并从表中删除,没有任何动画。

注意:

  • 我不确定是否需要同步,但似乎很聪明,因为我们正在处理异步删除项。
  • 我尝试使用 indexPath 对象作为字典的键,但它似乎不起作用。改为使用行。

希望这对您有所帮助。

关于iphone - 删除高度大于其他单元格的单元格时,动画看起来很尴尬,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10192607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com