2016-05-05 39 views
3

我尝试构建一个talbleview,其中每行可以显示一个子列表,当它被点击时。为了更新数据模型并致电UITableView with self-sizing insertRowsAtIndexPaths changes contentOffset

[self.tableView insertRowsAtIndexPaths:addedIndexPaths withRowAnimation:(UITableViewRowAnimationTop)]; 

动画发生在行可见时。 添加的单元格在动画后正确显示,但动画tableview有时会向上滚动。特别是在桌面视图的最后一部分发生这种情况。此外,tableview始终在表格中向上滚动,直到插入单元格上方的单元格顶部可见。

我想在可见动画期间修复contentoffset。 我试图设置begin updatesend updates中的上下文偏移量,但这不起作用,因为动画会向上滚动,您会看到内容滚动回原位。

我使用自动布局来使单元格自动调整大小。

如何在插入可见单元格时保持tableview的内容偏移量不变?

+0

你问表视图当您指定UITableViewRowAnimationTop滚动到添加单元格的顶部。如果你不希望发生这种情况,你需要选择一个新的行动画。你可能想要UITableViewRowAnimationNone。所有的选项都记录在这里https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableView_Class/#//apple_ref/c/tdef/UITableViewRowAnimation。 – Dare

+0

我不太确定,但是:可能是因为您使用的是autoLayout,但您不会在每次动画后自动调整autoLayout以进行自我调整。如果这是您做错的地方,请参阅此视频。希望能帮助到你。 https://www.youtube.com/watch?v=N5Ert6LTruY – Honey

+1

@ asma22我确实使用自动布局来调整我的单元格大小。我尝试并称为self.tableview layoutIfNeeded内部的开始/结束更新块,但它并没有解决问题。你会如何去通知自动布局? – HasenBaumeister

回答

0

我想出了这个问题。 自我调整大小是根本原因。

不要用自我调整就删除这些行:

tableView.estimatedRowHeight = 123

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {

+0

进行此更改后,您的单元格是否仍然自动调整大小? – Macondo2Seattle

+0

@ Macondo2Seattle:我通过'systemLayoutSizeFittingSize'来计算单元格的高度。 – anhtu

相关问题