Ich habe eine Reihe von Bildern, die ich für die Bildansichten der Zelle verwende. Sie sind alle nicht größer als 50 x 50. zB 40x50, 50x32, 20x37 .....
Wenn ich die Tabellenansicht lade, wird der Text nicht ausgerichtet, da die Breite der Bilder variiert. Außerdem möchte ich, dass kleine Bilder in der Mitte und nicht links angezeigt werden.
Hier ist der Code, den ich in meiner Methode 'cellForRowAtIndexPath' versuche
cell.imageView.autoresizingMask = ( UIViewAutoresizingNone );
cell.imageView.autoresizesSubviews = NO;
cell.imageView.contentMode = UIViewContentModeCenter;
cell.imageView.bounds = CGRectMake(0, 0, 50, 50);
cell.imageView.frame = CGRectMake(0, 0, 50, 50);
cell.imageView.image = [UIImage imageWithData: imageData];
Wie Sie sehen, habe ich einige Dinge ausprobiert, aber keines davon funktioniert.
self.imageView.bounds
das Bild zentriert.UITableViewCell
?Für diejenigen unter Ihnen, die keine Unterklasse haben von
UITableViewCell
:Der obige Code legt die Größe auf 40 x 40 fest.
Swift 2
Oder Sie können einen anderen (nicht getesteten) Ansatz verwenden, der von @Tommy vorgeschlagen wird:
Swift 3+
Der obige Code ist die Swift 3+ -Version des oben genannten.
quelle
UIScreen.mainScreen.scale
also ging ich einfach mitUIGraphicsBeginImageContext
. Ändern Sie auch die Größe der imageView in der Basiszelle.Hier ist, wie ich es gemacht habe. Bei dieser Technik werden die Text- und Detailtextbeschriftungen entsprechend nach links verschoben:
quelle
Bildansicht als Unteransicht zur Tabellenansichtszelle hinzufügen
quelle
Die ganze Zelle muss nicht neu erstellt werden. Sie können die Eigenschaften indentationLevel und indentationWidth von tableViewCells verwenden, um den Inhalt Ihrer Zelle zu verschieben. Anschließend fügen Sie Ihre benutzerdefinierte Bildansicht auf der linken Seite der Zelle hinzu.
quelle
Erstellen Sie besser eine Bildansicht und fügen Sie sie der Zelle als Unteransicht hinzu. Dann können Sie die gewünschte Bildgröße erhalten.
quelle
Ein einfach schneller ,
Schritt 1: Erstellen einer Unterklasse von
UITableViewCell
Schritt 2: Fügen Sie diese Methode der Unterklasse von UITableViewCell hinzu
Schritt 3: Erstellen Sie ein Zellenobjekt mit dieser Unterklasse in
cellForRowAtIndexPath
.Schritt 4: Viel Spaß
quelle
quelle
Das hat bei mir schnell geklappt:
Erstellen Sie eine Unterklasse von UITableViewCell (stellen Sie sicher, dass Sie Ihre Zelle im Storyboard verknüpfen).
Deaktivieren Sie in cellForRowAtIndexPath die Zelle als neuen Zelltyp:
Ändern Sie natürlich die Zahlenwerte entsprechend Ihrem Layout
quelle
Ich habe eine Erweiterung mit der Antwort von @GermanAttanasio erstellt. Es bietet eine Methode zum Ändern der Größe eines Bilds auf die gewünschte Größe und eine andere Methode, um dasselbe zu tun, während dem Bild ein transparenter Rand hinzugefügt wird (dies kann für Tabellenansichten nützlich sein, bei denen das Bild auch einen Rand haben soll).
quelle
Hier ist die Arbeitsmethode von @germanattanasio, die für Swift 3 geschrieben wurde
quelle
Wenn Sie verwenden
cell.imageView?.translatesAutoresizingMaskIntoConstraints = false
, können Sie Einschränkungen für die imageView festlegen. Hier ist ein Arbeitsbeispiel, das ich in einem Projekt verwendet habe. Ich habe Unterklassen vermieden und musste kein Storyboard mit Prototypzellen erstellen, aber es hat eine ganze Weile gedauert, bis ich es zum Laufen gebracht habe. Daher ist es wahrscheinlich am besten, es nur zu verwenden, wenn Ihnen kein einfacherer oder prägnanterer Weg zur Verfügung steht.quelle
Die reguläre UITableViewCell funktioniert gut, um Dinge zu positionieren, aber die cell.imageView scheint sich nicht so zu verhalten, wie Sie es möchten. Ich fand, dass es einfach genug ist, die UITableViewCell zum richtigen Layout zu bringen, indem man der cell.imageView zuerst ein Bild mit der richtigen Größe gibt
Dann können Sie einfach Ihr eigenes ordnungsgemäß funktionierendes UIImageView mit verbinden
Stellen Sie das Bild auf anImageView ein und es wird das tun, was Sie von einem UIImageView erwarten. Seien Sie die gewünschte Größe, unabhängig von dem Bild, das Sie ihm geben. Dies sollte in tableView erfolgen: cellForRowAtIndexPath:
quelle
Diese Lösung zeichnet das Bild im Wesentlichen als "Aspektanpassung" innerhalb des gegebenen Rechtecks.
quelle
Ich hatte das gleiche Problem. Vielen Dank an alle anderen, die geantwortet haben. Ich konnte anhand von Teilen mehrerer dieser Antworten eine Lösung zusammenstellen.
Meine Lösung verwendet Swift 5
Das Problem, das wir zu lösen versuchen, ist, dass wir möglicherweise Bilder mit unterschiedlichen Seitenverhältnissen in unseren
TableViewCell
s haben, aber wir möchten, dass sie mit konsistenten Breiten gerendert werden. Die Bilder sollten natürlich verzerrungsfrei gerendert werden und den gesamten Raum ausfüllen. In meinem Fall war ich damit einverstanden, große, dünne Bilder zu "beschneiden", also habe ich den Inhaltsmodus verwendet.scaleAspectFill
Zu diesem Zweck habe ich eine benutzerdefinierte Unterklasse von erstellt
UITableViewCell
. In meinem Fall habe ich es benanntStoryTableViewCell
. Die gesamte Klasse wird unten mit Inline-Kommentaren eingefügt.Dieser Ansatz hat bei mir funktioniert, wenn ich auch eine benutzerdefinierte Zubehöransicht und lange Textbeschriftungen verwendet habe. Hier ist ein Bild des Endergebnisses:
Gerenderte Tabellenansicht mit konsistenter Bildbreite
quelle
Die Lösung, die wir gefunden haben, ähnelt vielen anderen. Aber um die richtige Position des Trennzeichens zu erhalten, mussten wir es vor dem Aufruf einstellen
super.layoutSubviews()
. Vereinfachtes Beispiel:quelle