J'ai un UITableView qui utilise une cellule de tableau personnalisé et chaque cellule a un UIWebView.
Parce que UIWebView a mis du temps à se charger, je veux éviter de les recharger à tout prix . Dans certaines situations, toutes les cellules sont chargées, mais leur hauteur est foirée . Par conséquent, je dois "relayer" le table sans déclencher la fonction "cellForRow".
Comment puis-je résoudre mon problème?
[UIView setAnimationsEnabled:NO];
[tableView beginUpdates];
[tableView endUpdates];
[UIView setAnimationsEnabled:YES];
Une autre façon de le faire en utilisant des blocs
- Obj-C
[UIView performWithoutAnimation:^{
[self.tableView beginUpdates];
[self.tableView endUpdates];
}];
Rapide
UIView.performWithoutAnimation {
tableView.beginUpdates()
tableView.endUpdates()
}
Swifties Je devais faire ce qui suit pour que cela fonctionne:
// 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()
travailler sur mon projet, mais pas une solution commune.
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
Je préfère avoir une transition en douceur:
CGPoint offset = self.tableView.contentOffset;
[UIView transitionWithView:self.tableView duration:0.5 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
[self.tableView reloadData];
self.tableView.contentOffset = offset;
} completion:nil];
essaie.
Je voulais mettre à jour la hauteur de cellule pour la section 5 et le code suivant a fonctionné pour moi:
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)