UITableView-Trennzeichen, die durch die Wiederverwendung von Zellen falsch gezeichnet wurden?

7

Ich arbeite an einem iOS 5-Projekt mit Storyboards und verwende daher dynamische Tabellenzellenprototypen in IB. In einer der Ansichten habe ich eine Tabellenansicht mit Zellen mit variabler Höhe, wobei die Zellenhöhe aus der Höhe des Inhalts berechnet wird.

tableView:heightForRowAtIndexPath: gibt korrekte Werte für alle Zellen zurück, wenn die Tabellenansicht zum ersten Mal angezeigt wird. Alles ist gut, wenn man für ein paar Elemente nach unten scrollt, aber dann passiert etwas: Die tatsächlichen Zellen scheinen die richtige Höhe zu haben, einschließlich ihrer Berührungsbereiche, aber ihre Trennzeichen werden an den falschen Stellen gerendert (innerhalb von Zellen statt zwischen ihnen) / p>

Wenn Sie die Platzierung des Separators messen, sieht es so aus, als ob die Wiederverwendung von Zellen etwas damit zu tun haben könnte. Die Separatoren für die ersten drei Zellen werden korrekt wiedergegeben, nicht jedoch die vierte. heightForRowAtIndexPath: gibt die richtige Höhe dafür zurück (in diesem Fall 125 Pixel), und die darin enthaltenen Teilansichten befinden sich alle an den richtigen Stellen. Das Trennzeichen wird jedoch nur 108 Pixel vom vorherigen Trennzeichen gerendert und in den 125 Pixel hohen Bereich der Zelle platziert.

Hier ist der Kicker: 108px ist die Höhe der ersten Tabellenzelle, jetzt außer Sichtweite und wahrscheinlich wiederverwendet. Ich habe keinen eindeutigen Beweis dafür, aber es scheint, dass die Tabellenansicht heightForRowAtIndexPath: für diese Zellen ignoriert und nur das Trennzeichen entsprechend der wiederverwendeten Zellenhöhe rendert.

Dies erklärt nicht, warum eine Reihe späterer, kürzerer Zellen überhaupt keine Separatoren darstellen. Aber das ist alles was ich weiter machen muss.

Gibt es einen Workaround, eine IB-Einstellung oder etwas anderes, das helfen könnte?

    
JK Laiho 03.04.2012, 14:20
quelle

2 Antworten

22

Ich hatte das gleiche Problem, wo die Separatoren an scheinbar zufälligen Positionen gezeigt wurden.

Es stellte sich heraus, dass ich layoutSubviews außer Kraft setzte, aber vergessen habe, [super layoutSubviews] aufzurufen. Durch das Hinzufügen dieses Anrufs wurde das Problem für mich behoben.

    
pfluger 07.07.2014 03:41
quelle
1

Ich habe auch dieses seltsame Problem getroffen. Fügen Sie für eine benutzerdefinierte Tabellenzelle einen Layer als Trennzeichen hinzu, um eine bessere Wahl zu treffen.

in der initWith *** -Methode der benutzerdefinierten Tabellenzellenklasse:

%Vor%

Aktualisiere den Rahmen des Trennzeichens in der Methode layoutSubviews:

%Vor%     
lagrangee 10.07.2012 05:38
quelle