我正在使用此代码重新加载tableView部分 -
self.tableView.beginUpdates()
self.tableView.reloadSections(NSIndexSet(index: 1), withRowAnimation: UITableViewRowAnimation.None)
self.tableView.endUpdates()
仍然将行替换设置为动画,并且表格视图滚动到顶部。
如何确保不会将动画应用于重新加载部分+阻止表格视图滚动。
答案 0 :(得分:43)
要防止滚动和动画,请执行以下操作:
UIView.performWithoutAnimation {
let loc = tableView.contentOffset
tableView.reloadRows(at: [indexPath], with: .none)
tableView.contentOffset = loc
}
答案 1 :(得分:33)
Swift 4 :
实际上,在滚动或展开/折叠单元格期间防止疯狂动画的最佳方法是:
<div ng-repeat="movie in movies">
<b>{{movie.title}}</b>
<i ng-repeat="genre in movie.genres">{{($index > 0 ? ', ' : '') + genres[genre]}}</i>
</div>
答案 2 :(得分:28)
试试这个:
UIView.setAnimationsEnabled(false)
self.tableView.beginUpdates()
self.tableView.reloadSections(NSIndexSet(index: 1) as IndexSet, with: UITableViewRowAnimation.none)
self.tableView.endUpdates()
答案 3 :(得分:7)
给定的答案都不适合我。 这是我找到的解决方案,希望它对某人有用
Swift 4:
let lastScrollOffset = tableView.contentOffset
tableView.beginUpdates()
tableView.reloadSections(IndexSet(integer: 1), with: .none)
tableView.endUpdates()
tableView.layer.removeAllAnimations()
tableView.setContentOffset(lastScrollOffset, animated: false)
答案 4 :(得分:1)
在viewDidLoad的此方法中多添加一行
self.tableView.remembersLastFocusedIndexPath = true
将此代码添加到更新后要刷新的位置
UIView.setAnimationsEnabled(false)
self.tableView.beginUpdates()
self.tableView.reloadSections(NSIndexSet(index: 1) as IndexSet, with: UITableViewRowAnimation.none)
self.tableView.endUpdates()
答案 5 :(得分:1)
Objective-C:
[UIView setAnimationsEnabled:NO];
[[self tableView]beginUpdates];
[self.tableView reloadSections:[[NSIndexSet alloc] initWithIndex:1] withRowAnimation:UITableViewRowAnimationNone];
[[self tableView]endUpdates];
但是我认为以下代码更有用,更好。
[UIView performWithoutAnimation:^{
[[self tableView]beginUpdates];
[self.tableView reloadSections:[[NSIndexSet alloc] initWithIndex:1] withRowAnimation:UITableViewRowAnimationNone];
[[self tableView]endUpdates];
}];
答案 6 :(得分:0)
快速5
UIView.performWithoutAnimation {
self.tableView.reloadRows(at: [indexPath], with: .none)
}
答案 7 :(得分:0)
我也遇到了这个问题。似乎是由于将IndexPath放在.reloadSections而不是它所要求的IndexSet内。这就是为什么它似乎可以与.reloadRows一起使用而没有问题的原因:
tableView.reloadRows(at: [IndexPath], with: UITableView.RowAnimation)
tableView.reloadSections(IndexSet, with: UITableView.RowAnimation)
只需将要重新加载的部分包装为IndexSet:
tableView.reloadSections(IndexSet(integer: sectionInt), with: .none)