2009-08-20 7 views
20

Ich verwende ein UITableViewCell mit UITableViewCellStyleSubtitle. Wegen des Hintergrundbildes, das ich für die Zelle verwende, mag ich nicht, wohin das detailTextLabel geht. Ich möchte es verschieben und die Größe in der Zelle ändern, aber nichts, was ich versuche, scheint zu funktionieren.Anpassen der Positionen der Beschriftungen in einem UITableViewCell

CGRect currRect = cell.detailTextLabel.frame; 
cell.detailTextLabel.frame = CGRectMake(currRect.origin.x + 20, currRect.origin.y, currRect.size.width - 40, currRect.size.height); 

Ich habe versucht, diesen Code in beiden Tableview setzen: cellForRowAtIndexPath und Tableview: willDisplayCell: forRowAtIndexPath Methoden, aber weder funktioniert. Das Etikett bleibt einfach dort, wo es ist und die gleiche Größe.

Die Anpassung anderer Eigenschaften des Etiketts (textAlignment, backgroundColor und natürlich der Text selbst) funktioniert ordnungsgemäß.

Wie bekomme ich die detailTextLabel zu bewegen, wo ich brauche?

Falls dies von Bedeutung ist (obwohl ich nicht verstehe, warum es so sein sollte), hat diese spezielle Zelle auch die Eigenschaften imageView.image und backgroundImage gesetzt. Beide Bilder werden korrekt angezeigt.

Antwort

34

Sie wollen eine benutzerdefinierte UITableViewCell Unterklasse, die layoutSubviews überschreibt, um die schmutzige Arbeit der Anordnung von Subviews dort zu tun. Calling Super und dann die Anpassung der detailTextLabel.frame ist wahrscheinlich die einfachste Sache zu tun.

+0

Vielen Dank. Ich wusste, dass du das schon machen könntest, aber ich wusste nicht, dass es die layoutSubviews-Methode war, die außer Kraft gesetzt werden musste. – executor21

+0

Das ist ein guter Rat. Jedoch habe ich dieses Problem noch, wo ich, während ich die Etikettenabmessungen anpassen kann, es zum Beispiel nicht dazu bringen kann, mehrere Zeilen zu wordwrap und anzuzeigen, d. H .: \t self.textLabel.numberOfLines = 2; \t self.textLabel.lineBreakMode = UILineBreakModeWordWrap; – Joey

+0

Das Verhalten der .textLabel-Eigenschaft sollte mit jedem anderen UILabel identisch sein, also geben Sie ihm vielleicht nicht genügend vertikalen Platz? –

1

Oder Sie können die Zelle von UITableViewCellStyleSubtitle auf den Standardwert ändern und Ihre eigenen Objekte zu cell.contentView hinzufügen und sie dort platzieren, wo Sie möchten. Sie müssen UITableViewCell (z. B. benutzerdefinierte Zelle) nicht unbedingt ableiten oder layoutSubViews verwenden. Es kann alles in tableView: cellForRowAtIndexPath getan werden.

+0

Versucht dies. Das Hauptetikett bewegt sich dann in die Mitte der Zelle und es kann auch nicht bewegt werden. Subclassing scheint weniger problematisch. – executor21

-3

Sie könnten dies wahrscheinlich mit einem CGAffineTransform tun. Der (ungetestet) Code, um die detailTextLabel rechts 10 Pixel zu schieben aussehen würde, etwa wie:

CGAffineTransform translate = CGAffineTransformMakeTranslation(10.0, 0.0); 
[detailTextLabel setTransform:translate]; 

Während Sie dies tun können, ich glaube, Sie glücklicher sein werde UITableViewCell Ihre eigenen zu schaffen.

+0

Hat nicht funktioniert. Offensichtlich können Sie die Positionen von Unteransichten in keiner Weise anpassen, ohne die Zelle zu unterklassifizieren. – executor21

44

Sie könnten versuchen, und das Etikett mit der Vertiefung und Einrückungsebene einstellen:

cell.indentationWidth = MY_DESIRED_WIDTH; 
cell.indentationLevel = 1; 

(für nicht vertieften Zellen)

Oder gegliederte Zellen nur tun:

cell.indentationLevel = cell.indentationLevel + 1; 

Diese beiden sollte Ihre Etiketten verschieben/einrücken.

+1

Dies funktioniert gut, da es bedeutet, dass Sie für einige Layouts (wo Sie ein Bild auf der linken Seite haben) kein eigenes Label hinzufügen müssen, um das vorhandene zu ersetzen. Vielen Dank. –

+0

Grear antwort, gut um endlich zu wissen, dass so etwas existiert! – pmk

+4

Es ist erwähnenswert, dass 'cell.indentationWidth' eine negative Zahl sein kann - was bedeutet, dass Sie die Zelle nicht unterklassen müssen, wenn Sie nur die gesamte contentView nach links verschieben müssen. – SaltyNuts

Verwandte Themen