我有一个使用自定义表格单元格的UITableView,每个单元格都有一个UIWebView。
因为UIWebView需要花时间加载,所以我想避免不惜一切代价重新加载它们。 在某些情况下,我已经加载了所有单元格,但它们的高度混乱了。 因此,我需要“重新布局”表而不触发“cellForRow”函数。
如何解决我的问题?
答案 0 :(得分:199)
[UIView setAnimationsEnabled:NO];
[tableView beginUpdates];
[tableView endUpdates];
[UIView setAnimationsEnabled:YES];
答案 1 :(得分:48)
使用块
的另一种方法<强>的OBJ-C 强>
[UIView performWithoutAnimation:^{
[self.tableView beginUpdates];
[self.tableView endUpdates];
}];
<强>夫特强>
UIView.performWithoutAnimation {
tableView.beginUpdates()
tableView.endUpdates()
}
答案 2 :(得分:3)
<强> Swifties 强> 我不得不做以下工作:
// 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()
答案 3 :(得分:3)
在我的项目上工作,但不是常见的解决方案。
let loc = tableView.contentOffset
UIView.performWithoutAnimation {
tableView.reloadData()
tableView.layoutIfNeeded()
tableView.beginUpdates()
tableView.endUpdates()
tableView.layer.removeAllAnimations()
}
tableView.setContentOffset(loc, animated: true)//animation true may perform better
答案 4 :(得分:1)
我更喜欢顺利过渡:
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 :(得分:0)
我想更新第5部分的单元格高度以及以下代码为我工作:
Select 1 as value