2015-08-19 7 views
5

In meinem speziellen Fall macht ich Blick in den View-Controller habe, für die ich die folgenden Bedingungen hinzugefügt:Wie ein Blick auf dem Platz der Größe mit seinem Superview mit Auto Layout

  • Sets vorangestellten, obere und untere Kanten auf 0
  • Set Multiplikator Unterkante bis 2: 1

Nun sitzt die Ansicht in der oberen Hälfte auf den view-Controller.

Innerhalb dieses füge ich ein quadratisches Bild Ansicht, für die ich die folgenden Bedingungen hinzugefügt:

  • Ctrl ziehen Sie von Bild Ansicht gleich Höhen und Breiten zu Superview und hinzugefügt.
  • Ändern Sie den Multiplikator für Breite und Höhe, bis ich ein perfektes Quadrat habe. Ich habe nicht ein perfektes Quadrat
  • Hinzugefügt Einschränkungen Mitte vertikal und horizontal

Meine Einschränkungen scheinen perfekt zu sein, aber wenn im Simulator ausgeführt wird. Außerdem wird die Größe der Bildansicht nicht geändert, wenn sie auf verschiedenen Simulatorbildschirmen ausgeführt wird.

Dies ist mein Setup:

  • Auto Layout und Größenklassen sind
  • ich eine Inferred Größe für das Storyboard
  • Adaptive Layout Jede
  • ich für Breite und Höhe eingestellt ist, aktiviert Ich versuche das für die 4s, 5,6 und 6+ Simulatoren zu machen.

Ich schaute auf anderen stackoverflow Pfosten, aber nichts scheint zu arbeiten.

Gibt es einige grundlegende Schritte, um dies zu tun?

enter image description here

edit:

Nach Einstellung> = 10 Constraints:

enter image description here

bearbeiten 3: I hinzugefügt oben, unten, führt, Constraints 2mal nachlauf, 1 mit niedrigeren als oder gleich (Priorität 1000), der andere mit größer als oder gleich (Priorität 800) mit dem konstanten Wert von 90. Ich weiß nicht, warum für den Boden versucht, zu 90 pt aus der Hauptansicht, nicht den Container zu strecken Ansicht (gre en eins).

enter image description here

+2

Sie sollten eine aspectratio Einschränkung von 1 verwenden. –

+0

also nur das Seitenverhältnis von 1: 1 und die Höhe oder witdh proportional zur Superview? Dadurch bekomme ich ein Quadrat (das zu klein ist), aber es ändert sich nicht die Größe abhängig vom Bildschirm, die gleiche Größe auf allen Bildschirmen – Kobe

Antwort

11

Sie haben eine Ansicht, die erweitert werden muss, um ihren Container zu füllen, während das Seitenverhältnis beibehalten wird. Dies ist ein häufiges Muster bei Auto Layout.

Der Trick ist, zwei Beschränkungen für Vorder-/Hinter/oben/unten zu verwenden:

  • =10 mit niedriger Priorität

  • >=10 an erforderlicher Priorität.

setzen sie alle zusammen, Sie haben:

  • Seitenverhältnis 1: 1

  • Mitte X/Y in Superview

  • Phasenan-/Phasen-/Oben/Unten auf Superview = 10 (bei 750 Priorität)

  • Vorlauf-/Trailin g/Oben/Unten auf Super> = 10 (bei 1000 Priorität)

Es gibt auch ein paar Dinge, mit UIImageView zu berücksichtigen:

  • UIImageView wird eine intrinsische Inhaltsgröße basiert haben auf das Bild, das angezeigt wird. Sie sollten also sicherstellen, dass die Inhaltsumgehungspriorität niedriger ist als die 750-Priorität, die Sie für die =10-Einschränkungen verwenden.

  • UIImageView.contentMode legt fest, wie das zugrunde liegende Bild in Relation zur Größe des UIImageView bemessen wird. Standardmäßig ist es auf UIViewContentModeScaleToFill festgelegt.

+0

Es funktioniert, aber ich habe eine Frage. Auf den 4s sieht das Quadrat zu klein aus, kann ich das irgendwie kontrollieren? Auf dem 6 und 5s Bildschirm sind die Abmessungen in Ordnung. – Kobe

+0

@Adrian Sie können eine Beschränkung der minimalen Höhe für die Superansicht des Bildes verwenden. ZB: height = superview.height * 0,5 @ Priorität 900, Höhe> = 350 @ Priorität 1000 – Darren

+0

@darren das hat funktioniert. Ich muss 1 neue Einschränkung wie Img.height = 0.25 x [email protected] einführen, um die Größe des Bildes protional x 0.25 multiplier zu vergrößern, da das Bild drastisch von iPhone 6 zu 6 Plus wuchs. –

2
container view 
---------------------------------------------- 
|      |      | 
|     >=10     | 
|  imageView |      | 
|  ----------------------------  | 
|  |   |    |  |  
|  |   |    |  | 
|  |   |    |  | 
|  |   |    |  | 
|  |   |    |  | 
|- >=10 -|---------- 1:1 -----------|- >=10 -| 
|  |   |    |  | 
|  |   |    |  | 
|  |   |    |  | 
|  |   |    |  | 
|  ----------------------------  | 
|      |      | 
|     >=10     | 
|      |      | 
---------------------------------------------- 

** Wenn Sie möchten, dass Sie die Höhe des Imageview angeben können, oder auch mit einer niedrigeren Priorität Einschränkung Breite.

+0

Können Sie mir sagen, wie genau setzen Sie diese Einschränkungen? Ich füge einfach eine führende, nachgestellte, untere und obere Einschränkung hinzu und wähle größer als oder gleich und setze die Konstante auf 10 oder wie? – Kobe

+0

Ja, es ist genau wie du sagst, dann füge dem Bild ein 1: 1 Seitenverhältnis hinzu (Strg + Ziehen) das Bild zu sich selbst. –

+0

Es funktioniert nicht für mich. Ich habe einen Screenshot angehängt, um zu sehen, wie es aussieht. – Kobe

1

Ich hatte Erfolg mit dieser Konfiguration.

  1. Was habe ich zum ersten Mal für Mitte X. Einschränkungen hinzufügen (Ignorieren Sie die Mitte Y ein, obwohl es in meinem Screenshot ist. Es bricht unabhängig wegen Schritt 2.)

  2. Dann habe ich eine oben und unten constraint

  3. Schließlich fügte ich ein Seitenverhältnis constraint

als ich diese animierten, die Box als Quadrat richtig skaliert. Wenn Sie möchten, kann ich das Testprojekt hochladen. 1 auf der Ansicht, die Sie Platz bleiben wollen und dann nur enthalten entweder es ist Höhe oder die Breite Elternteil es ist, aber nicht beides:

enter image description here

Verwandte Themen