Le bug peut être reproduit en utilisant le repo ici .
J'ai un bogue étrange affectant mon projet dans iOS 11 dans mon UITableView . Le TableView en question est groupé, a des cellules extensibles.
Il se produit de nombreux effets étranges qui n'apparaissent pas sur ma branche iOS 10:
Il existe également un ticket qui semble lié sur le forum Apple Developers ici .
J'ai essayé sans succès:
if #available(iOS 11.0, *) {
tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentBehavior.never
}
J'essaie de trouver le comportement qui a été modifié dans iOS 11 et qui pourrait être à l'origine de ce problème.
Toute aide serait appréciée!
edit: Couper les limites a aidé (mais à la fin, il cache/coupe le problème). Il me reste quelques problèmes (2, 3 et 4)… .. Lorsque j'essaie de déballer une cellule, celle-ci se téléporte au sommet au lieu de se dérouler sans à-coups… .. Lorsque je déballe une cellule et que je souhaite y accéder sans à-coups, il se téléporte en haut puis ne fait que défiler. (dû ajouter une section supplémentaire à afficher).
Voici une vidéo du problème (avec iPhone 7 Plus, iOS 11, Xcode 9 Golden Master): https://youtu.be/XfxcmmPdeoU
Dans iOS 11, toutes les propriétés UITableView
estimées (estimatedRowHeight
, estimatedSectionHeaderHeight
et estimatedSectionFooterHeight
) sont définies par défaut sur UITableViewAutomaticDimension
.
Je vois que pour vos cellules, tout va bien puisque vous retournez UITableViewAutomaticDimension
dans heightForRow
. Pour vos en-têtes de section et vos pieds de page, vous n’utilisez cependant pas le dimensionnement automatique. J'essaierais de désactiver tout le comportement de dimensionnement automatique de vos en-têtes/pieds de page en définissant estimatedSectionHeaderHeight
et estimatedSectionFooterHeight
sur 0
.
Essayez cette solution, en supposant que vos IBOutlets et vos variables ne sont pas des données confidentielles dans StandardHeaderView.Swift:
func toggleSection(section: SectionType) {
self.sectionsOpened[section] = !self.sectionsOpened[section]!
let sectionIndex = self.sections.index(of: section)!
let indexPath = IndexPath(row: 0, section: sectionIndex)
UIView.animate(withDuration: 0.25) {
self.tableView.reloadRows(at: [indexPath], with: .automatic)
if let headerView = self.tableView.headerView(forSection: sectionIndex) as? StandardHeaderView {
headerView.configWith(title: headerView.headerTitleLabel.text!, isOpen: self.sectionsOpened[section]!, selector: headerView.selector)
}
self.tableView.scrollToRow(at: IndexPath(row: 0, section: sectionIndex), at: .top, animated: true)
}
}