UITableViewCell的高度变化没有滚动

我知道如何使用这里看到的方法来animationUITableViewCell的高度变化:当你select的时候,你可以在UITableViewCell上设置animation的高度变化吗?

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

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

问题是,当animation这个变化,它将重新定位UITableView,使我的UITextField不再在顶部。

这就是我所做的,或多或less:

self.customAmountCellSize = height; [self.tableView beginUpdates]; [self.tableView endUpdates]; 

我也试过了

 self.customAmountCellSize = height; CGPoint originalOffset = self.tableView.contentOffset; [self.tableView beginUpdates]; [self.tableView endUpdates]; [self.tableView setContentOffset:originalOffset animated:NO]; 

我想要行高度的animation,我不希望UITableView作为结果滚动。

有任何想法吗?

看来你遇到的问题是你的表视图滚动到底部,所以当你更新它的内容时,它将尝试修复它。

有两种方法可以防止滚动:

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

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

     self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, verticalGap)]; 

在这两种情况下,您都需要计算您尝试实现的垂直空间。 完成后,您需要将contentInsettableFooterView恢复到原始状态。

我认为表视图滚动,因为您的文本字段正在成为第一响应者,而不是因为单元格高度的变化。 尝试保持单元格高度相同,只需调整偏移量即可。

如果我是正确的,比这里的解决scheme:UITableView自动尝试滚动,当您的键盘出现。 为了解决这个问题,将内容偏移量设置为主队列中的所需偏移量,该主队列将在下一个runloop开始时触发。 将下面的代码放入对UIKeyboardWillShowNotification或UITextFieldDelegate shouldBeginEditing方法的响应中:

 // Get the current offset prior to the keyboard animation CGPoint currentOffset = self.tableView.contentOffset; UIEdgeInsets currentInsets = self.tableView.contentInset; __weak SomeTableViewControllerClass *weakSelf = self; dispatch_async(dispatch_get_main_queue(), ^{ [UIView animationWithDuration:0 animations:{ // set the content offset back to what it was weakSelf.tableView.contentOffset = currentOffset; weakSelf.tableView.contentInset = currentInsets; } completion:nil]; }); 

对于表视图的contentInset.bottom,有时需要类似的修复,这取决于你的UITableView的框架和其他因素。