2014-12-30 9 views
7

Ich habe eine dynamische benutzerdefinierte UITableViewCell, die das automatische Layout nutzt.Bevorzugter Ansatz zum Ändern des UITableViewCell-Inhalts basierend auf der Zellenbreite

Ich verändere den Textinhalt eines Etiketts, abhängig von der Breite der Zelle.

reloadData wird während des Orientierungsübergangs aufgerufen, um die Beschriftung zu aktualisieren.

Während dies passiert, stelle ich mir vor, es gibt eine bessere Möglichkeit, dies zu behandeln, die nicht den Overhead des Neuladens der TableView beinhaltet.

(Keiner der Einschränkungen geändert werden muß. Das Etikett ist an der gleichen Stelle, sondern zeigt einfach unterschiedliche Inhalte, wenn es für sie mehr Platz ist.)

  • Soll ich Unterklasse UILabel und den Text ändern in -didMoveToSuperview?

  • Ist es möglich, den Text in -layoutSubViews zu ändern? (Würde das nicht einen anderen Layout-Durchlauf verursachen, weil der Text geändert wurde?)

Danke für alle Antworten!

+0

"das bringt nicht den Overhead des Neuladens der tableView mit" Ich denke, die erste Sache zu tun ist zu überdenken, warum Sie glauben, dass das Neuladen der Tabellenansicht "Overhead" ist. Es ist ziemlich effizient, da nur die sichtbaren Daten der Tabellenzelle tatsächlich frisch abgerufen werden - und Ihr Datenmodell sollte vollständig effizient sein oder Sie tun es falsch. – matt

+0

Es scheint nur wie Overkill, Matt. Das automatische Layout wird aufgrund der automatischen Rotation bereits ausgeführt, und ich vermute, dass es direkt innerhalb des bereits vorhandenen Layout-Passes gehandhabt werden kann. Ich weiß einfach nicht genug über das automatische Layout, um zu wissen, wie die Zelle oder das Label damit umgehen soll. –

+0

Aber das Problem, das ich nicht erwähne, ist das subtile Flackern des Nachladens, das Sie ohne das Nachladen nicht sehen würden. Es würde schöner aussehen, wenn ich den Tisch nicht neu laden müsste, und er hat sich einfach automatisch gedreht und neu gezeichnet (mit anderem Inhalt). Möglich? –

Antwort

4

Das Hinzufügen dieser Logik zu layoutSubviews sollte den Trick machen. Es heißt jedes Mal, wenn die Auto-Layout-Engine ihre Sache macht.

+0

Ich verwende '-viewWillTransitionToSize: withTransitionCoordinator: 'Ich möchte versuchen, alles innerhalb des automatischen Layouts zu handhaben (da die sichtbaren Zellen bereits auf den Übergang reagieren, ohne dass die Tabelle neu geladen werden muss). Ich muss nur herausfinden, wo ich den Text tatsächlich ändern soll. –

+0

Wenn die visuellen Zellen bereits reagieren, warum dann nicht den Text ändern, wo immer diese Reaktion stattfindet? – Rick

+0

Das ist mein Denken, aber ich weiß nicht, mit welcher Methode ich es beschreiben kann, und ich habe noch nie an "-layoutSubviews" gebastelt, wenn das überhaupt die richtige Methode ist, um sie zu überschreiben. Will in ein paar Tagen ins Unbekannte eintauchen und versuchen zu entdecken, wo die Textänderung passieren sollte, wenn niemand diese Antwort hat. –

Verwandte Themen