Die UITableViewCell-Unterklasse kann nicht eingerückt werden

8

Ich habe UITableViewCell unterklassifiziert, um eine benutzerdefinierte Zelle mit einer Schaltfläche und zwei Beschriftungen zu erstellen. Die Zellendefinition wird von einer Xib geladen, wobei das in Dave Marks Beginnender iPhone-Entwicklung beschriebene Muster verwendet wird. Hier ist der wesentliche Code:

%Vor%

Die Beschriftungen und Schaltflächen werden wie erwartet angezeigt, die Einrückungsebene wird jedoch nicht berücksichtigt. Ich habe wie unten indentationLevelForRowAtIndexPath implementiert, aber die Zelle ist immer noch ganz nach links ausgerichtet.

%Vor%

Beachten Sie, dass die Einrückungsebene funktioniert, wenn ich keine benutzerdefinierte Zelle verwende.

Irgendwelche Hinweise?

    
Daniel 15.09.2010, 01:08
quelle

3 Antworten

21

Update für iOS 8: Der folgende Code funktioniert aus irgendeinem Grund nicht mehr

Alternativer Vorschlag für iOS 8:

Ziehen Sie in Betracht, eine AutoLayout-Einschränkung zu erstellen, um den eingeränderten linken Rand darzustellen

Ändern Sie zur Laufzeit diese Einschränkung, um die Einzugsebene zu ändern

Wenn Sie eine benutzerdefinierte UITableViewCell-Unterklasse haben, kann dieser Unterklasse ein IBOutlet zugeordnet sein. (Leider hat Apple keine findConstraintByTag / Id Funktion zur Verfügung gestellt)

Die ironisch benannte "constant" -Eigenschaft von NSLayoutConstraint kann geändert werden, um die Einzugsebene zu ändern.

Für iOS 7 funktioniert das (sollte aber nicht mehr empfohlen werden)

Basierend auf dem Vorschlag von vodkhang habe ich die folgende Lösung in meiner UITableViewCell-Unterklasse implementiert. Nicht sicher, ob dies die beste Lösung ist, aber es scheint gut zu funktionieren.

%Vor%     
Daniel 15.09.2010, 23:45
quelle
1

Ich denke, dass Sie die Einzugsebene in Ihrer benutzerdefinierten UITableViewCell anpassen müssen. Ich nehme an, dass diese Methode (und Methoden wie – tableView:heightForRowAtIndexPath: ) im Fall von UITableViewCell keine Auswirkungen haben, wenn Ihre benutzerdefinierte UITableViewCell sie bereits angegeben hat

    
vodkhang 15.09.2010 01:36
quelle
0

Wenn Sie eine UITableViewCell in einer XIB entwerfen, verwenden Sie die customView-Zelleneigenschaft, die die Einrückung nicht automatisch verwendet. Sie können UITableViewCell von der Unterklasse ableiten und layoutSubviews implementieren, um Ihren Frame basierend auf dem Einzug zu ändern, oder Sie können das Gleiche tun, wo immer Sie Ihre Zellen in Ihrem Tabellendelegierten oder in Ihrer Datenquelle konfigurieren. Ich wünschte, dass Apple Einrückung für benutzerdefinierte Zellen implementiert.

    
Peter DeWeese 09.05.2011 15:31
quelle

Tags und Links