Warum wird eine UIImageView Größe geändert, wenn ein neues Bild in iOS 6 zugewiesen wird?

8

Eine Anwendung enthält eine UITableView, die eine benutzerdefinierte UITableViewCell enthält. Die Zelle enthält wiederum eine UIImageView.

Das Problem besteht darin, dass beim Festlegen des Bildes in cellForRowAtIndexPath das Bild den gesamten UITableViewCell-Bereich einnimmt:

%Vor%

In IB wurde "Aspect Fit" als Modus ausgewählt, aber das Ändern dieses Felds hat keine sichtbaren Auswirkungen auf das Ergebnis.

Wenn das Bild jedoch von IB aus eingestellt wird, ohne cell.imageView.image = image in meinem Code aufzurufen, ist das Ergebnis genau das, was ich sehen möchte. Das Bild bleibt innerhalb der Grenzen, die ich für die UIImageView in IB definiert habe, und versucht nicht, so zu skalieren, dass es der gesamten vertikalen Höhe von UITableViewCell entspricht:

Das Bild, das ich verwende, ist 1307 x 309 Pixel, falls das wichtig ist. Tests wurden auf iOS 6.1 Simulator ausgeführt.

Ich habe das in der UIIMageView-Dokumentation bemerkt:

  

Wenn Sie in iOS 6 und höher der Eigenschaft restorationIdentifier dieser Ansicht einen Wert zuweisen, wird versucht, den Rahmen des angezeigten Bilds beizubehalten. Insbesondere behält die Klasse die Werte der Eigenschaften bounds, center und transform der Ansicht und der Eigenschaft anchorPoint des zugrunde liegenden Layers bei. Während der Wiederherstellung stellt die Bildansicht diese Werte wieder her, so dass das Bild genau wie zuvor angezeigt wird. Weitere Informationen zur Funktionsweise der Zustandsbewahrung und -wiederherstellung finden Sie im iOS App Programming Guide.

Aber nichts hier oder anderswo in der Dokumentation, die ich finden konnte, löste das Problem. Das Hinzufügen einer "Wiederherstellungs-ID" von "Foo" zur UIImageView in IB unter "Identity" hat das Verhalten nicht verändert. Durch das Deaktivieren der Option "Auto-Layout verwenden" wurde auch das Verhalten nicht geändert.

Wie kann ich verhindern, dass iOS die Größe der UIImageView in einer UITableViewCell bei der Bildeinstellung ändert?

    
Rich Apodaca 01.04.2013, 16:10
quelle

1 Antwort

6

Es stellt sich heraus, dass UITableViewCell anscheinend bereits eine Eigenschaft namens "imageView" hat, die den gesamten Hintergrund der Zelle abdeckt. Wenn Sie die Bildeigenschaft dieses imageView-Objekts festlegen, wird das Hintergrund Bild festgelegt, nicht das Bild, an dem ich interessiert war.

Wenn ich meine Methode folgendermaßen ändere und dabei sicherstelle, dass CustomCell die Eigenschaft "myImageView" besitzt, wurde das Problem behoben:

%Vor%

Diese SO-Antwort auf eine etwas andere Frage wies mich in die richtige Richtung.

    
Rich Apodaca 03.04.2013, 21:43
quelle