Abrufen eines UITableViewCell-Rahmens

8

Ich habe mich selbst für ein paar Tage mit dieser Frage frustriert. Ich versuche, einem UITableViewCell ein UILabel hinzuzufügen. Ich möchte, dass UILabel die gesamte Breite der Zelle abdeckt, minus 5 oder 10, sowohl auf der rechten als auch auf der linken Seite. Mein Problem besteht darin, programmatisch die Größe des Rahmens der Zelle zu bestimmen, in dem das Etikett platziert werden soll. Egal, welchen UITableViewStyle ich verwende, der Wert cell.contentVew.frame.size.width ist nicht annähernd gleich der Breite des Zellenrahmens selbst.

Zum Beispiel kann ich in der von mir konstruierten Tabelle mein gewünschtes Ergebnis erreichen, indem ich UITableViewCell unterklassiere und ein UILabel mit einer manuell bestimmten Breite (durch nur Versuch und Irrtum) durch:

erstelle %Vor%

Aber es ist diese 397-Nummer, die mich ärgert. Ich möchte einen Weg, um programmatisch zu bestimmen, was es für irgendeine Breitentabelle oder -art sein sollte. Dies sollte ein einfacher Prozess sein, indem Sie einfach die Breite des gesamten Rahmens der Zelle bestimmen und dann 10 oder 20 subtrahieren, so dass die Kanten des UILabels nicht den Rand der Zelle berühren.

Wenn ich jedoch den TableViewStyle auf UITableViewStyleDefault setze und dann versuche:

%Vor%

Ich bekomme 320. Wenn ich den Stil auf einen der anderen drei Stile einstelle, ist die zurückgegebene Zahl 302. Selbst die 320-Nummer ist nicht annähernd so breit wie der Zellenrahmen (wie bei meiner manuell ermittelten Zahl von 397) ).

Welchen Wert muss ich für den Zugriff auf die gesamte Breite des Zeichenrahmens der Zelle angeben? Ich bin sicher, wie bei den meisten ärgerlichen Problemen, die Lösung wird mich dazu bringen, mich auf die Stirn schlagen zu wollen, aber ich bin soweit, dass ich jetzt darauf vorbereitet bin.

EDIT für weitere Informationen:

Eine Klärung für alle Interessierten. Diese Frage bezieht sich hauptsächlich auf einen gruppierten Stiltisch. Für einen einfachen Stil kann die Antwort auf meine Frage einfach in der cellForRowAtIndexPath-Methode bestimmt werden:

%Vor%

Das Problem, das ich habe, ist, dass die rectForRowAtIndexPath-Methode die Breite des Frames zurückgibt, in dem die Zelle gezeichnet wird, was für eine Plain-Style-Tabelle gut ist, da die Zellenbreite die gesamte Breite des Frames ist. In einer gruppierten Tabelle ist die Breite der Zelle jedoch kleiner als die Breite des Rahmens, in dem sie gezeichnet wird. Daher gibt diese Methode eine Zahl zurück, die ziemlich viel breiter ist als die Breite der Zelle. Es ist möglich, dass die Breite der Zelle in einem gruppierten Tabellenformat eine feste Zahl ist, die kleiner als die Breite des Tabellenrahmens ist. Dies könnte also die Lösung des Problems sein. Ich werde das untersuchen und meine eigene Frage hier beantworten, wenn das der Fall ist.

    
Chris 04.10.2011, 19:14
quelle

2 Antworten

8

Ich habe meine eigene Antwort festgelegt, und ich hoffe, dass sie jedem hilft, der sich mit dem gleichen Thema konfrontiert sieht. Die Berechnung der Marge einer gruppierten tableView, die ich auf diese StackOverflow-Antwort.

Dieser Code stellt eine Beschriftung in einer tableView-Zelle bereit, die die Zelle mit einem Abstand zwischen den beiden Kanten der Zelle überspannt und vertikal in der Zelle zentriert ist.

%Vor%     
Chris 05.10.2011, 04:26
quelle
1

Sounds wie diese würden heutzutage am besten durch automatische Layoutbeschränkungen behandelt.

    
ShowPony 15.07.2015 22:26
quelle

Tags und Links