Sie müssen lediglich die Tabellenansicht verwenden Höhe zu steuern. Sie können die Tabelle ändern, die eine Zelle geändert hat, indem Sie die Aufrufe verwenden, um bestimmte Zellen zu entfernen und dann wieder hinzuzufügen, sodass Sie die gesamte Tabelle nicht erneut laden müssen. Die Höhe muss jedoch mithilfe der Delegat-Callback-Tabelle abgerufen werden: heightForRow: atIndexPath:
Ich sehe nicht, warum das nicht praktisch ist. Sie können eine beliebige Anzahl von asynch-Systemen ausführen, die einen zentralen Höhenzwischenspeicher des Tabellenansichtsdelegaten aktualisieren. Jedes Mal, wenn Sie eine Zelle erstellen, können Sie ihr den Delegierten als Referenz zuweisen, so dass sie zurück in die Tabelle sprechen kann Es weiß, dass Zellen neu geladen werden müssen und was die neuen Höhen sind. Wenn Sie darüber nachdenken, ist die schlechte Tabellenansicht eine Bildlaufansicht, die alle diese separaten Zellen verwalten und visuell zusammenhalten muss - so ist es wirklich unfreundlich von einer Zelle, betrügerisch zu werden und Frames zu verändern, ohne den Tisch zu lassen mal sehen was sowieso los ist. Es ist am besten, den Tisch fahren zu lassen und ihm zu sagen, was zu tun ist.
Ja, wenn Sie [tableView reloadData] aufrufen, ruft sie die Delegate-Methode 'tableView: heightForRow: atIndexPath:' auf, in der Sie die entsprechenden Zellenhöhen anhand Ihrer Daten berechnen können. Denken Sie jedoch daran, dass dies in Bezug auf die Scroll-Performance teuer werden kann, wenn Sie sehr große Zellen oder viele davon haben. – runmad
Aus diesem Grund ist der Bereich für den Höhencache sehr wichtig. Sie müssen also nicht viel arbeiten, um dem System mitzuteilen, wie hoch die Höhe ist. –
Sie müssen [tableView reloadData] nicht aufrufen, wie es von Canada Dev vorgeschlagen wird. Sie können stattdessen [tableView beginUpdates] aufrufen; [tableView endUpdates]; Dies führt dazu, dass die TableView jede Zelle neu misst (Aufruf von heightForForRow: atIndexPath: für jede Zelle), ohne jede Zelle neu zu laden. – TomSwift