2016-07-25 5 views
0

Ich komme aus XAML Welt, wo wir Bildstrecken-Modus von , UniformToFill und Uniform haben. Ich möchte in meiner iOS App den Modus UniformToFill erreichen. In iOS stieß ich auf ScaleToFill, AspectToFit, AspectToFill und viele andere. Keiner von ihnen erfüllt meine Anforderung.Wie man Bild UniformToFill Stretch-Modus einstellen

Erforderliches Verhalten: UIImageView (Bildcontainer) Größe im Layout bleibt behoben. Skalieren Sie das Bild nach der festen Größe UIImageView und behalten Sie das Seitenverhältnis des Bildes selbst bei. Wenn Sie beide Seiten (vertikal, horizontal) aneinander anpassen, wird der Rest des Bildes abgeschnitten.

Um es besser zu veranschaulichen, hier ist der Screenshot; Ich suche den dritten von links zu erreichen.

Image stretch mode

Antwort

0

XAML zu iOS-Konvertierung ist wie folgt.

Fill = ScaleToFill

Uniform = AspectToFit &

UniformToFill = AspectToFill

Dies ist die genaue Übereinstimmung. Wenn Sie dieses Ergebnis nicht erhalten, bedeutet das, dass Sie etwas falsch gemacht haben. Ansonsten ist das perfekt abgestimmt.

+0

"UIImageView" geht für mich über die Layout-Einschränkungen hinaus, wenn "AspectToFill" verwendet wird. Sie sagen, es ist Auto-Layout-Problem? – XamlGuy

+0

sollten Sie folgende Zeile hinzufügen: 'imageview.layer.masksToBounds = true', es ist kein automatisches Layout-Problem, aber es ist wegen des Verhaltens von ios, bis Sie seine Grenzen nicht abschneiden, wird es außerhalb seiner Grenzen gehen. Sie haben eine andere Möglichkeit, dies zu tun, Sie können auch diese Methode 'imageview.clipsToBounds = true' aufrufen, das funktioniert auch genauso wie oben, funktioniert jetzt? –

+0

Rechts. Ich werde es ausprobieren und zu dir zurückkommen. – XamlGuy

0

Das ist, was .ScaleAspectFill tut.

Sie sprechen über eine UIImage als Container? Ich denke du solltest in UIImageView schauen. So etwas wie das funktionieren würde (das in Swift geschrieben, aber leicht an Objective-C

let image = UIImage(named: "your_image") 
let imageView = UIImageView(image: image) 
imageView.contentMode = .ScaleAspectFill 
+0

Danke für die Korrektur. Ich meinte eigentlich 'UIImageView'. – XamlGuy

0

ich glaube, Sie UIViewContentModeScaleAspectFill als Content-Modus des Bildes Ansicht verwenden sollten.

Sie Apple documentation um weitere Informationen beziehen.

Darin heißt es über scaleAspectFill,

die Möglichkeit, den Inhalt zu f maßstabs krank die Größe der Aussicht. Einige Teile des Inhalts können abgeschnitten werden, um die Grenzen der Ansicht zu füllen.

scaleAspectFit

Die Option, den Inhalt zu skalieren, um die Größe der Ansicht passen durch das Seitenverhältnis beibehalten wird. Jeder verbleibende Bereich der Ansichtsgrenzen ist transparent.

Versuchen Sie beide, echten Unterschied zu fühlen.

+0

Wird tun. Aber wie kommt es, dass sie im Attribut-Inspektor nicht im Dropdown-Menü aufgelistet sind? – XamlGuy

+0

Sie werden im Attributinspektor unter 'view' als' mode' bezeichnet."Aspect fill" entspricht "scaleAspectFill" und "Aspect fit" entspricht "scaleAspectFit" – Lion

+0

Danke für die Antwort. Der Schuldige war "Clip Subviews" -Eigenschaft, die nicht überprüft wurde. – XamlGuy