2010-07-05 12 views
16

Ich habe ein Bild, das Ich mag würde in einem UITableViewCell mit dem UITableViewCellStyleSubtitle Stil, der eine UIImageView bietet anzuzeigen, und zwei Textzeilen, sowie ein optionales Zubehör Ansicht.iOS SDK UIViewContentModeScaleAspectFit vs. UIViewContentModeScaleAspectFill

Wenn ich jedoch den Inhaltsmodus von UIImageView entweder auf UIViewContentModeScaleAspectFit oder UIViewContentModeScaleAspectFill einstelle, scheint es keinen Unterschied zu machen. Beide Inhaltsmodi zeigen einfach das gesamte Bild an und verschieben den Text nach rechts, um Platz für das Bild zu schaffen.

Hat jemand Beispiele, wie sich diese in der Praxis tatsächlich unterscheiden? Die docs sagen:

UIViewContentModeScaleAspectFit: 
Scales the content to fit the size of the view by maintaining the aspect ratio. Any  remaining area of the view’s bounds is transparent. 

UIViewContentModeScaleAspectFill: 
Scales the content to fill the size of the view. Some portion of the content may be clipped to fill the view’s bounds. 

Aber diese Inhalte Modi erscheinen nicht wie beworben werden verhalten.

EDIT: Ich bin mit SDK iOS 4.

+0

Das einzige, was mir einfällt ist, dass UITableViewCell mit UITableViewCellStyleSubtitle möglicherweise diese Inhaltsmodi überschreibt, um die Bildansicht automatisch auf die Größe des einzufügenden Bildes zu skalieren. Dies ergibt einen gewissen Sinn aus den Ergebnissen, die durch die Praxis erzielt werden. – Dalmazio

+0

Im Allgemeinen habe ich festgestellt, dass, wenn UIKit automatisch generiert, wie eine Ansicht aussehen sollte, es scheint, dass es nur Ihre Parameter nimmt und sie als Richtlinien verwendet. Stattdessen durchläuft es irgendeinen komischen proprietären Code und kann manchmal seltsame Ergebnisse liefern. Manchmal ist es einfacher, einfach auf die Standardeinstellungen, die sie Ihnen geben, zu verzichten und die UITableViewCell von Grund auf neu zu erstellen. –

Antwort

9

Der Grund, warum Sie nicht einen Unterschied zwischen diesen Modi sehen ist dass die UITableViewCell die Bildansicht automatisch an das Seitenverhältnis des Bildes anpasst. Die Inhaltsmodi kommen nur zum Tragen, wenn das Seitenverhältnis der Ansicht von dem des Bildes abweicht.

Entweder überschreiben Sie layoutSubviews in Ihrer benutzerdefinierten UITableViewCell Klasse oder erstellen Sie selbst eine Bildansicht (verwenden Sie nicht die, die die Tabellenansicht Zelle bietet).

+0

+1: Beantwortet die Titularfrage nicht wirklich, aber ich habe das bei Google gefunden und es hat mir geholfen! Ich habe eine Unterklasse von 'UITableViewCell' erstellt, die eine' UIImageView' hat, die ich natürlich 'imageView' genannt habe. Es sprang herum und ich konnte nicht verstehen warum. Einfach umbenennen hat es so gemacht, dass die 'layoutSubviews' Methode des zugrundeliegenden' UITableViewCell' mein Bild nicht mehr bewegt. – ArtOfWarfare

35

ich hatte das gleiche Problem. Scheint, als ob die Apple-Dokumentation ein bisschen fehlt.

Ich fand die Antwort durch die Suche im Internet. http://www.iphonedevsdk.com/forum/iphone-sdk-development/2973-crop-image.html

Grundsätzlich

img1.contentMode = UIViewContentModeScaleAspectFill; 
img1.clipsToBounds = YES; 

Wenn Sie es ein bisschen mehr Phantasie sein wollen, lesen Sie in diesem Beitrag: UIImageView change Width and Height

+3

Dies funktioniert nicht für eine Tableview-Zelle. – Ryan

+3

Drei verdammte Stunden später war 'clipsToBounds' genau das was ich suchte. Vielen Dank. –