Der Fehler kann mit dem Repo hier reproduziert werden.
Ich habe einen merkwürdigen Fehler, der sich auf mein Projekt in iOS 11 in meiner UITableView auswirkt. Die in Frage stehende TableView ist gruppiert und hat erweiterbare Zellen.
Es gibt viele seltsame Effekte, die in meinem iOS 10-Zweig nicht auftreten:
Es gibt auch ein Ticket, das im Apple-Entwicklerforum hier verwandt scheint.
Ich habe es ohne Erfolg versucht:
if #available(iOS 11.0, *) {
tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentBehavior.never
}
Ich versuche das Verhalten zu finden, das sich in iOS 11 geändert hat und das dieses Problem verursachen könnte.
Jede Hilfe wäre dankbar!
bearbeiten: Das Beschneiden von Begrenzungen hat geholfen (aber am Ende wird das Problem ausgeblendet). Ich habe immer noch ein paar Probleme (2, 3 und 4) ... Wenn ich versuche, eine Zelle auszupacken, teleportiert sie sich nach oben, anstatt reibungslos zu verlaufen Wenn es reibungslos ist, teleportiert es nach oben und scrollt nur zu ihm. (musste einen zusätzlichen Abschnitt hinzufügen).
Hier ist ein Video zum Problem (mit iPhone 7 Plus, iOS 11, Xcode 9 Golden Master): https://youtu.be/XfxcmmPdeoU
In iOS 11 sind alle geschätzten UITableView
-Eigenschaften (estimatedRowHeight
, estimatedSectionHeaderHeight
und estimatedSectionFooterHeight
) standardmäßig UITableViewAutomaticDimension
.
Ich sehe, dass es für Ihre Zellen gut ist, da Sie UITableViewAutomaticDimension
in heightForRow
zurückgeben. Für die Kopf- und Fußzeilen Ihrer Abschnitte verwenden Sie jedoch keine automatische Größenanpassung. Ich würde versuchen, das automatische Größenanpassungsverhalten in Ihren Kopf-/Fußzeilen zu deaktivieren, indem Sie estimatedSectionHeaderHeight
und estimatedSectionFooterHeight
auf 0
setzen.
Quelle: iOS 11 Floating TableView-Header
Versuchen Sie diese Problemumgehung, vorausgesetzt, Ihre IBOutlets und Variablen sind keine Privaten in 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)
}
}