具有自调整大小 insertRowsAtIndexPaths 的 UITableView 更改 contentOffset
Posted
技术标签:
【中文标题】具有自调整大小 insertRowsAtIndexPaths 的 UITableView 更改 contentOffset【英文标题】:UITableView with self-sizing insertRowsAtIndexPaths changes contentOffset 【发布时间】:2016-05-05 16:00:03 【问题描述】:我尝试构建一个 talbleview,其中每一行都可以在点击时显示一个子列表。为此,我更新了 Datamodel 并调用了
[self.tableView insertRowsAtIndexPaths:addedIndexPaths withRowAnimation:(UITableViewRowAnimationTop)];
动画在行可见时发生。 添加的单元格在动画后正确显示,但在设置动画时,tableview 有时会向上滚动。这尤其发生在表格视图的最后一部分。此外,表格视图总是向上滚动,直到插入单元格上方的单元格顶部可见。
我想在可见动画期间修复 contentoffset。
我尝试在begin updates
和end updates
内设置上下文偏移量,但这不起作用,因为动画会向上滚动,您会看到内容滚动回原位。
我使用自动布局来使单元格自动调整大小。
如何在插入可见单元格时保持tableview的内容偏移不变?
【问题讨论】:
当您指定 UITableViewRowAnimationTop 时,您要求表格视图滚动到添加单元格的顶部。如果您不希望这种情况发生,您需要选择一个新的行动画。你可能想要 UITableViewRowAnimationNone。您的所有选项都记录在此处developer.apple.com/library/ios/documentation/UIKit/Reference/…。 我不太确定,但是:可能是您正在使用 autoLayout,但您没有向 autoLayout 发送消息以在每个动画后自行调整。如果这是您做错的,请查看此视频。希望能帮助到你。 youtube.com/watch?v=N5Ert6LTruY @asma22 我确实使用自动布局来调整单元格的大小。我尝试并在开始/结束更新块内调用 self.tableview layoutIfNeeded 但它没有解决问题。您将如何通知自动布局? 我会按照你的建议去做 @Dare 我已经尝试过 UITableViewRowAnimationNone。我没工作 。在某些部分它工作得很好。但尤其是在表格视图的最后一部分附近开始跳跃 【参考方案1】:我发现了这个问题。 自我调整大小是根本原因。
不要使用自动调整大小只需删除这些行:
tableView.estimatedRowHeight = 123
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
【讨论】:
进行此更改后,您的单元格是否仍会自动调整大小? @Macondo2Seattle:我通过systemLayoutSizeFittingSize
计算了单元格的高度。以上是关于具有自调整大小 insertRowsAtIndexPaths 的 UITableView 更改 contentOffset的主要内容,如果未能解决你的问题,请参考以下文章
为啥自调整大小的表格视图单元格中的 UIImageView 具有内容模式 AspectFit 的原始高度?
UICollectionView 自定义布局动画故障,在 performBatchUpdates 上具有自我调整单元格大小
UICollectionView 具有自调整大小的单元格未正确计算 contentSize
UIImageView 在具有不同高度的自定义 UITableViewCell 内自动调整大小