我不想在开始更新animation,结束更新块为uitableview?
我有一个UITableView。 它使用自定义表格单元格,每个单元格都有一个uiwebview。 Bcoz UIWebView带着时间来加载,我想避免不惜一切代价重新加载它们。 在某些情况下,我已经加载了所有的单元格,但是它们的高度是混乱的。 因此,我需要“重新布局”表而不触发“cellForRow”function。
- 我绝对不能使用reloadData …因为它会重新加载单元格。
- 我试过tableView.setNeedDisplay,setNeedsLayout等,他们都不能重新排列表格单元格
- 唯一的办法就是调用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)