Ich arbeite seit ungefähr 2 Tagen daran und dachte, ich teile meine Erkenntnisse mit Ihnen.
Die Frage ist: Ist es möglich, die Breite einer Zelle in einer gruppierten UITableView zu verkleinern?
Die Antwort ist nein.
Es gibt jedoch zwei Möglichkeiten, um dieses Problem zu umgehen.
Lösung 1: Eine dünnere Tabelle Es ist möglich, den Rahmen der tableView so zu ändern, dass die Tabelle kleiner wird. Dies führt dazu, dass UITableView die Zelle im Inneren mit der reduzierten Breite rendert.
Eine Lösung hierfür kann folgendermaßen aussehen:
-(void)viewWillAppear:(BOOL)animated
{
CGFloat tableBorderLeft = 20;
CGFloat tableBorderRight = 20;
CGRect tableRect = self.view.frame;
tableRect.origin.x += tableBorderLeft; // make the table begin a few pixels right from its origin
tableRect.size.width -= tableBorderLeft + tableBorderRight; // reduce the width of the table
tableView.frame = tableRect;
}
Lösung 2: Zellen durch Bilder rendern lassen
Diese Lösung wird hier beschrieben: http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
Ich hoffe, diese Informationen sind hilfreich für Sie. Ich habe ungefähr 2 Tage gebraucht, um viele Möglichkeiten auszuprobieren. Dies ist, was übrig blieb.
quelle
Antworten:
Ein besserer und sauberer Weg, dies zu erreichen, besteht darin, UITableViewCell zu unterordnen und seine
-setFrame:
Methode wie folgt zu überschreiben :Warum ist es besser? Weil die anderen beiden schlimmer sind.
Passen Sie die Breite der Tabellenansicht in an
-viewWillAppear:
Erstens ist dies unzuverlässig. Die Übersicht oder der übergeordnete Ansichtscontroller können den Tabellenansichtsrahmen nach dem
-viewWillAppear:
Aufruf weiter anpassen . Natürlich können Sie-setFrame:
für Ihre UITableView genau wie das, was ich hier für UITableViewCells mache , Unterklassen erstellen und überschreiben . Die Unterklasse von UITableViewCells ist jedoch eine weit verbreitete, leichte und Apple-Methode.Zweitens, wenn Ihre UITableView über backgroundView verfügt, möchten Sie nicht, dass die backgroundView zusammen eingegrenzt wird. Die Breite von backgroundView beizubehalten, während die Breite von UITableView eingegrenzt wird, ist keine triviale Arbeit, ganz zu schweigen davon, dass das Erweitern von Unteransichten über die Übersicht hinaus überhaupt nicht sehr elegant ist.
Benutzerdefiniertes Zellen-Rendering zum Fälschen einer schmaleren Breite
Dazu müssen Sie spezielle Hintergrundbilder mit horizontalen Rändern vorbereiten und Unteransichten von Zellen selbst anordnen, um die Ränder aufzunehmen. Im Vergleich dazu erledigt die automatische Größenänderung alle Arbeiten für Sie, wenn Sie einfach die Breite der gesamten Zelle anpassen.
quelle
Um dies in Swift zu tun, das keine Methoden zum Festlegen von Variablen bereitstellt, müssen Sie den Setter für überschreiben
frame
. Ursprünglich (zumindest , wo ich es gefunden) geschrieben hierquelle
Wenn nichts funktioniert, können Sie dies versuchen
Stellen Sie die Hintergrundfarbe der Zelle als klare Farbe ein und fügen Sie dann ein Bild der Zelle mit der erforderlichen Größe ein. Wenn Sie Text in dieser Zelle anzeigen möchten, platzieren Sie eine Beschriftung über dem Bild. Vergessen Sie nicht, die Hintergrundfarbe des Etiketts auch auf klare Farbe einzustellen.
quelle
Ich fand, dass die akzeptierte Lösung bei Rotation nicht funktionierte. Um UITableViewCells mit festen Breiten und flexiblen Rändern zu erzielen, habe ich die obige Lösung wie folgt angepasst:
Die Methode wird immer dann aufgerufen, wenn sich das Gerät dreht, sodass die Zellen immer zentriert sind.
quelle
Es gibt eine Methode, die aufgerufen wird, wenn der Bildschirm gedreht wird: viewWillTransitionToSize
Hier sollten Sie die Größe des Rahmens ändern. Siehe Beispiel. Ändern Sie die Rahmenkoordinaten nach Bedarf.
quelle
Ich mache es in
Und das hat bei mir funktioniert
quelle
Fügen Sie in der .h-Datei den Delegaten 'UITableViewDataSource' hinzu.
quelle