webentwicklung-frage-antwort-db.com.de

iOS 11 UITableView-Fehler

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:

  1. Titel überlagert
  2. seltsame Teleportprobleme, wenn die Inhaltsgröße die UITableView-Containergröße überschreitet, wenn die Zellen zusammenfallen
  3. Seltsamer Teleporter zu Beginn der Tabellenansicht zu Beginn des Bildlaufs, wenn die Inhaltsgröße die Größe des Containers überschreitet
  4. Zellgröße ist falsch (ziemlich oft)

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

enter image description here

17
Swift Rabbit

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

23
jvdev7

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)
    }
}
0
Patrick Bodet