我不想在开始更新animation,结束更新块为uitableview?

我有一个UITableView。 它使用自定义表格单元格,每个单元格都有一个uiwebview。 Bcoz UIWebView带着时间来加载,我想避免不惜一切代价重新加载它们。 在某些情况下,我已经加载了所有的单元格,但是它们的高度是混乱的。 因此,我需要“重新布局”表而不触发“cellForRow”function。

  1. 我绝对不能使用reloadData …因为它会重新加载单元格。
  2. 我试过tableView.setNeedDisplay,setNeedsLayout等,他们都不能重新排列表格单元格
  3. 唯一的办法就是调用beginupdates / endupdates块,这个块能够重新启动我的表而不会触发cellForRow! 但是,我不想要animation! 这个块产生一个animation效果,但我不想要它…

我该如何解决我的问题?

[UIView setAnimationsEnabled:NO]; [tableView beginUpdates]; [tableView endUpdates]; [UIView setAnimationsEnabled:YES]; 

还有一种方法可以使用块

OBJ-C

 [UIView performWithoutAnimation:^{ [self.tableView beginUpdates]; [self.tableView endUpdates]; }]; 

迅速

 UIView.performWithoutAnimation { tableView.beginUpdates() tableView.endUpdates() } 

斯威夫特我不得不做以下工作:

 // Sadly, this is not as simple as calling: // UIView.setAnimationsEnabled(false) // self.tableView.beginUpdates() // self.tableView.endUpdates() // UIView.setAnimationsEnabled(true) // We need to disable the animations. UIView.setAnimationsEnabled(false) CATransaction.begin() // And we also need to set the completion block, CATransaction.setCompletionBlock { () -> Void in // of the animation. UIView.setAnimationsEnabled(true) } // Call the stuff we need to. self.tableView.beginUpdates() self.tableView.endUpdates() // Commit the animation. CATransaction.commit() 

我宁愿平稳过渡:

 CGPoint offset = self.tableView.contentOffset; [UIView transitionWithView:self.tableView duration:0.5 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ [self.tableView reloadData]; self.tableView.contentOffset = offset; } completion:nil]; 

试一试。

我想更新第5部分的单元格高度,下面的代码为我工作:

 UiView.setAnimationsEnabled(False) self.productTableView.reloadSections(NSIndexSet(index: SectionType.ProductDescription.hashValue), withRowAnimation: UITableViewRowAnimation.None) self.productTableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 5), atScrollPosition: UITableViewScrollPosition.Bottom, animated: false) UIView.setAnimationsEnabled(true)