2014-04-08 17 views
12

Ich habe benutzerdefinierte UITableViewCell und verwalten Auswahl meiner Zellen. Wenn die Zelle ausgewählt ist und das Häkchen angezeigt wird, verkleinert sich die Breite der Zelle Content View, und meine Beschriftungen mit nachlaufenden Beschränkungen verschieben sich nach links. Wie kann ich die Inhaltsverlagerung effektiv vermeiden?UITableViewCellAccessoryCheckmark und AutoLayout Einschränkungen

Ich wollte nicht die Einschränkungen zu führen, da ich flexible Tabellenansicht Breite haben und sie sind ausgerichtet. Wenn ich die Beschränkungen des Labels im Code über seine IBOutlets aktualisieren möchte, ging ich in Schwierigkeiten, da ich mehrere Subklassen von UITableViewCell in cellForRow: zurückgab und ich einen unerkannten Selektorfehler in didSelectRowAtIndexPath: bekam, wenn ich versuchte, Beschränkungen in Code festzulegen. Irgendeine elegante Lösung? Vielen Dank.

enter image description here

enter image description here

Antwort

8

Dieses Verhalten ist konstruktionsbedingt.

Die einfachste Möglichkeit, das gewünschte Verhalten zu erzielen, besteht darin, für jede Zelle eine leere Zubehöransicht festzulegen, die den gesamten Inhalt in der gleichen Entfernung wie das Häkchen nach links verschiebt.

+2

Vergessen Sie nicht, dass die accessoryView Vorrang vor der accessoryType nimmt. Der AccessoryType wird nicht angezeigt, wenn Sie ein AccessView nicht nil haben. – CrimsonChris

14

Ich hatte ein ähnliches (eigentlich das genaue) Problem, wo das Häkchen alles nach links schieben würde.

- EDIT:

Wenige Stunden nach meiner ursprünglichen Antwort, ich erkannte, dass es eine wirklich einfache Frage ist.

Dieser Push auf der linken Seite ist eine Einschränkung der contentView der Zelle. Damit?

Schließen Sie die Einschränkung von der Position auf der rechten Seite (wie die i Taste), an die Zelle selbst, nicht seine content.

Constraint to cell view



- Original Antwort (die eigentliche Antwort auf, ist dies für die Aufzeichnung ist):

ich nur realisiert eine sehr einfache Lösung gibt. Ich hatte eine Taste, die nach links gedrückt wurde, wenn das Häkchen gesetzt war, und ich musste eine Einschränkung beibehalten, um sie an Ort und Stelle zu halten (so dass "nicht abhaken" die Schaltfläche nicht nach rechts bewegt). Es war "Breite" von rechts hart und insgesamt schlechtes Verhalten. Es macht nichts, dass ich die "Breite" des Häkchens nicht "bekommen" konnte, um dies dynamisch zu machen.

Lösung?

Halten Sie eine Einschränkung von links.

Das ist es. Ich habe auch ein Label, also in meinem Fall: Constraint von der Taste links neben dem Label (damit sie sich nicht überschneiden) und von der Button-links nach-links-Content-Ansicht. Grundsätzlich, was sich auf der rechten Seite bewegt, "erreicht" nicht wirklich die linke Seite (vielmehr muss alles auf der rechten Seite sitzen).

Cell with constraints to left

+1

Beide gute Antworten und viel einfacher als die akzeptierte Lösung! –

+0

Einfache, schnelle und intelligente Lösung, ist sehr guter Tipp. – FreeGor

+1

Dies funktioniert nicht Xcode 9, Swift 4, iOS 9.3. Auto-Layout beschwert sich und bricht die Einschränkungen. Was sollte es wirklich tun. Das Grundproblem ist ein Apple-Designfehler: UITableViewCell saugt, genau wie UITableView. Es ist ein Jahrzehnt alt und bereit für den Schrotthaufen. – Womble

Verwandte Themen