2017-09-15 2 views
8

Eine App mit mehreren Abschnitten, ein paar Zeilen pro Abschnitt, wenn "erweitert", keine wenn "ausgeblendet". Jeder Abschnitt hat eine Abschnittsüberschrift, wurde mit einer Unterklasse von UITableViewHeaderFooterView etc. wiederverwendet. So weit so gut.iOS 11 Floating TableView-Header

dann in iOS 11:

Screenshot describing the issue

Ich habe den visuellen Debugger verwendet, und bestätigt schwimmt mein Abschnitt Header ist. Alle Zeilen unterhalb der Kopfzeile werden korrekt angezeigt, die anderen Kopfzeilen werden ordnungsgemäß angezeigt.

Um die Vernunft wiederherzustellen, habe ich die gesamte Wiederverwendungslogik für den Header verworfen und sie nur programmatisch gemacht. Gleich. Alle arbeiten vor iOS 11, schweben immer noch in iOS 11. Der Bereich, der schwebt, scheint sich jedes Mal zu ändern, also gibt es das.

Irgendwelche Ideen?

+0

Wird das Problem dadurch behoben, dass Sie die Logik für den erweiterten Vertrag deaktivieren? –

Antwort

0

Haben Sie die Kopfzeile aus einem Storyboard hinzugefügt, wenn ja, teilen Sie bitte die "Kopfzeilen von Tableview in Storyboard" Screenshot
Berechnen Sie auch die Zeilenhöhe? sind Berechnungen wie erwartet?

+0

Lädt sie ursprünglich von einem XIB, dann erstellt sie sie programmatisch. Beides verursacht das Problem. Wie für die Höhe habe ich eine geschätzte Höhe & es wird über Einschränkungen berechnet & UITableViewAutomaticDimension – VDub19

1

Versuchen Sie, den Tabellenstil von einfach zu gruppiert zu ändern.

+0

Interessant. Dies scheint den visuellen Fehler korrigiert zu haben, aber hinterlässt ein paar andere Probleme (alle im Zusammenhang mit einem gruppierten TableView - Footer-Höhen, Hintergrundfarben und leicht veränderten Animationen). Irgendeine Idee, was normale Tabellenansichten betrifft? Auf der Oberfläche scheint dies eine unnötige Änderung zu sein, um ein größeres Problem zu vermeiden. – VDub19

35

lief in ein ähnliches Problem und fand the discussion on this issue, die für mich gearbeitet:

self.tableView.estimatedRowHeight = 0; 
self.tableView.estimatedSectionHeaderHeight = 0; 
self.tableView.estimatedSectionFooterHeight = 0; 

Scheint, wie das Standardverhalten von UITableView in iOS 11 geändert geschätzten Höhen zu verwenden. Die Versionshinweise für iOS 11 Beta 2 lauten:

Tabellenansichten verwenden jetzt standardmäßig geschätzte Höhen. Dies bedeutet auch, dass Zellen und Abschnittskopf-/Fußzeilenansichten jetzt standardmäßig eine eigene Größe haben. Der Standardwert für die Eigenschaften "approchtedRowHeight", "decuratedSectionHeaderHeight" und "decuratedSectionFooterHeight" lautet nun UITableViewAutomaticDimension. Dies bedeutet, dass die Tabellenansicht eine geschätzte zu verwendende Höhe auswählt. Sie sollten nach Möglichkeit immer eine genauere Schätzung für jede Eigenschaft bereitstellen. Dies ist Ihre beste Schätzung des Durchschnittswerts der tatsächlichen Höhen. Wenn Sie über vorhandenen Tabellenansichtscode verfügen, der sich beim Erstellen Ihrer App mit dem iOS 11-SDK anders verhält und Sie keine Selbstdimensionierung übernehmen möchten, können Sie das vorherige Verhalten wiederherstellen, indem Sie geschätzte Höhen inaktivieren, indem Sie einen Wert von Null für festlegen jede geschätzte Höheneigenschaft. (30197915)

siehe auch die Beta 2 Release Notes mirrored here.

+0

Nicht sicher, dass dies mit der Zeilenhöhe zusammenhängt, da die Höhen korrekt angezeigt werden (nur die Zeile selbst ist falsch platziert). Wenn Sie die vorgeschlagene Änderung vornehmen, werden nur wenige Zeilen ausgegeben. – VDub19

+0

Setzen Sie diese zurück auf Null behoben das Problem für mich, danke! – amleszk

+0

Keine Notwendigkeit, die Zeilenhöhe zu setzen ('self.tableView.estimatedRowHeight = 0;'), nur das Setzen von 'decuratedSectionHeaderHeight' und' decuratedSectionFooterHeight' funktioniert für mich. – Itachi

1

Ich weiß nicht, warum in meinem Fall ist @ahmedre Antwort nicht funktioniert ...

Also meine Antwort, die Ihnen vielleicht helfen, wenn Sie alle geschätzten Eigenschaften auf 0 gesetzt auch nicht funktionieren:

func tableView(_ tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat { 
    return 0.1 
} 

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
    return 0.1 
} 
+0

Works! 0 Hat nicht funktioniert. – DaNLtR