2017-10-22 1 views
0

Da ich das gleiche leicht in Android und WPF tun könnte, dachte ich, XCode Interface Builder wäre auch einfach. Aber ich habe mich getäuscht. Ich habe Stunden auf dem Storyboard verbracht, um die Einschränkungen mehrfach zu ändern. Ich weiß, dass diese Frage dumm scheint, aber bitte geben Sie mir einen Hinweis.IB, Keep ImageView Center, aber wachsen als Bildschirmgröße, das Seitenverhältnis beibehalten

Ich möchte so etwas auf dem Storyboard. Welche Einschränkungen sollte ich setzen?

  1. Das Seitenverhältnis des ImageView sollte beibehalten werden.
  2. Der ImageView ist horizontal zentriert.
  3. Der ImageView wächst als die Bildschirmbreite, z. B. 90% der Bildschirmbreite auf einem vertikalen Telefon. Optional, ich wünschte, ich könnte ein Maximum, zum Beispiel nicht größer als sagen, 400. Ich meine, 90% auf einem iPad ist zu groß.
  4. Der obere Rand des ImageView sollte der Bildschirmgröße angemessen sein. Ich meine, ein hartcodierter Rand 20 würde es auf einem iPad zu nah an die Spitze bringen, und ein hartcodierter Rand 200 würde auf einem iPad gut aussehen, aber nicht auf einem iPhone SE.

enter image description here

+0

Hier ist eine Antwort (von mir) - https://stackoverflow.com/questions/42860324/autolayout-contraints-for-a-view-from -xib/42861232 # 42861232 - mit einem zugeordneten Repo (https://github.com/justdfd/soSquare). Das ist Swift 3, aber die wichtigen Teile ... IB-Einschränkungen, Prioritäten usw. sollten funktionieren, egal was passiert. Der Trick ist * multiple * Constraints mit Prioritäten, damit die Layout-Engine weiß, was zu brechen ist. AUCH, dass ein "Quadrat" "UIView" (a) ein 'UIImageView' mit einem Seitenverhältnis sein kann und (b) einfach rechteckig sein kann. – dfd

+0

Wenn es um iOS geht, ist es nicht gut, sich an die prozentuale Welt zu halten. Autolayout ist nicht so und es bringt die Probleme früher als später. –

Antwort

1
  1. Constrain die Breite und Höhe des Seitenverhältnisses zu halten (eine constrain:

    imageView.widthAnchor.constraint (EqualTo: imageView.heightAnchor, Dimension: 0,6) .isActive = true

  2. Constrain die centerX zu viewController ‚s Ansicht centerX:

    imageView.centerXAnchor.constraint (EqualTo: self.view.centerXAnchor, konstant: 0) = true .isActive

  3. Gegebenheiten die imageView Breite (oder Höhe) zu Breite der etwas Verhältnis viewController ‚s unter Verwendung Ansicht (90 hier%):

    imageView.widthAnchor.constraint (EqualTo: self.view.widthAnchor, Multiplikator: 0,9) .isActive = true

  4. Dies ist das einzige Problem ist, was eine vernünftige versetzt ist? Zu vage Anforderung. Aber wenn Ihr Problem nur darin besteht, abhängig von der angegebenen Benutzeroberfläche einen korrekten Offset zu setzen, würde ich Größenklassen verwenden, um abhängig von der gegebenen Größenklasse verschiedene Einschränkungen bereitzustellen - siehe documentation.

+0

Sind sie nicht möglich mit dem Designer selbst, und muss ich das programmatisch tun? Für 4, einfach, kann ich den oberen Rand als Prozentsatz des Bildschirms anstelle einer fest codierten Zahl festlegen? –

+0

Ich verwende keine Storyboards, also habe ich sie programmatisch für Sie entworfen, aber soweit ich weiß, sollten all diese mit IB erstellt werden können. –

+0

Ziehen Sie den iv nach rechts und wählen Sie Seitenverhältnis. Legen Sie iv.centerX = centerX, iv.width = 0,9 x Breite fest. Die Breite wächst, aber die Höhe bleibt gleich und verzerrt die iv. Warum wird das Seitenverhältnis nicht beibehalten? –

1

Wenn Sie dies in Ihrem Storyboard erreichen wollen, gehen Sie wie folgt vor:

  1. Setzen Sie Ihren Imageview in der gewünschten Größe und Position
  2. Aspect Ratio Einschränkung auf Ihre Imageview
  3. Add hinzufügen centre horizontal constraint zu Ihrem imageView
  4. Fügen Sie Ihrer imageView-Ansicht eine Breiteneinschränkung hinzu, die der Superview-Breite entspricht. Ändern Sie dann den Multiplikator zu (desired width)/(width of the superview). Ändern Sie die Priorität in 999
  5. Fügen Sie Ihrer imageView -Widerstandsbeschränkung hinzu, und legen Sie die Beziehung auf Less Than oder Equal fest.Geben Sie hier Ihren Maximalwert ein (400)
  6. Fügen Sie für den oberen Offset einen UIView mit klarem Hintergrund in Ihrem superView hinzu. Legen Sie oben, links und rechts gleich oben links und rechts von Ihrem Superview fest und fügen Sie Ihrem imageView einen vertikalen Abstand von 0 hinzu. Fügen Sie dann eine Höhenbeschränkung hinzu, die der Superview-Höhe entspricht, und ändern Sie den Multiplikator in (desired space)/(height of the superview). (Es ist die rosae Ansicht im Anhang)

enter image description here

Verwandte Themen