在不滚动的情况下为UITableViewCell设置动画高度更改

Mik*_*keS 5 animation uitableview ios

我知道如何使用此处所示的方法为UITableViewCell 的高度变化设置动画:在选择时,您可以在UITableViewCell上设置高度变化动画吗?

但是,使用该方法,UITableView将同时滚动,我不希望它这样做.

我有一个UITableView,只有很少的细胞; 它占用的屏幕高度低于屏幕高度.底部单元格有一个UITextField,当它开始编辑时,我手动设置UITableView的内容偏移量,以便具有UITextField的单元格滚动到顶部.然后,根据UITextField中的输入,我可能想要增加UITableViewCell的大小以显示额外的选项,或多或少.

问题是,在动画这个更改时,它将重新定位UITableView,以便我的UITextField不再位于顶部.

这就是我正在做的,或多或少:

self.customAmountCellSize = height;

[self.tableView beginUpdates];
[self.tableView endUpdates];
Run Code Online (Sandbox Code Playgroud)

我也试过了

self.customAmountCellSize = height;
CGPoint originalOffset = self.tableView.contentOffset;

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

[self.tableView setContentOffset:originalOffset animated:NO];
Run Code Online (Sandbox Code Playgroud)

我想要行高动画,我不希望UITableView作为结果滚动.

有任何想法吗?

Bri*_*kel 3

您遇到的问题似乎是您的表格视图滚动到底部,因此当您更新其内容时,它会尝试修复该问题。

您可以采取两种方法来防止滚动:

  1. 将表视图的内容插入设置为初始空白的高度:

    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, verticalGap, 0);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加一个与垂直间隙高度相同的空页脚视图:

    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, verticalGap)];
    
    Run Code Online (Sandbox Code Playgroud)

在这两种情况下,您都需要计算您想要达到的垂直空间。完成后,您需要将contentInset或恢复到其原始状态。tableFooterView