2016-11-03 4 views
0

Ich erstelle eine UIScrollView von Xib, in der 3 Ansicht gibt es 2 UIViews und in der Mitte ein UIImageView. Wenn ich Einschränkungen festlege, fragt Xcode, ob Y-Positionseinschränkungen gesetzt werden sollen. Das Problem ist jedoch, dass die Y-Positionsbeschränkung Scrollview blockiert, um nach unten zu scrollen und die Ansichten automatisch anzupassen, was im Landscape-Modus hässlich aussieht.dynamische Höhe der Scrollview Subviews in Autolayout ios

enter image description here

wenn ich diese Einschränkung bin löschen fragen Höhe von Subview zu beheben. Ich habe viel gesucht, aber ich bin neu im Autolayout und verstehe viele Lösungen nicht. Jede Hilfe wäre großartig.

+0

fanden Sie eine Tableview mit? – Adeel

+0

Haben Sie UIImageview eine Höhenbeschränkung gegeben? – KKRocks

+0

@Adeel Ich möchte scrollview hier verwenden. –

Antwort

1

Sie müssen alle Höhenbeschränkungen in der Inhaltsansicht festlegen. Aber Sie möchten auch, dass die Höhe des Inhalts proportional zur Bildschirmgröße ist.

Um dies zu tun, weisen Sie der Ansicht, die die UISCrollView enthält, die Höhenbeschränkung der Bildansicht [equal | proportional | a-computation-of] zu.

Es scheint seltsam zu sein, Ebenen der Herarchie zu überspringen, wenn man Einschränkungen zwischen zwei Ansichten zuweist, die nicht direkter Vorfahr/Geschwister sind, aber innerhalb einer Scrollview (zumindest) ist es vollkommen akzeptabel.

Sie sind im Grunde die Scrollview zu sagen, dass es Inhalt ist eine bekannte Größe und zur gleichen Zeit diesen Inhalt Einstellung dinamically an die Bildschirmgröße angepasst werden (wenn die Zwänge der Wurzel uiview korrekt eingestellt sind)

UIView1 
|---UIScrollView 
    |---UIView2 
    |---UIImageView [heightConstr.constant=UIView1.height-UIView2.height-UIView3.height-margins] 
    |---UIView3 

Dies ist die Grundidee, programmatisch zu tun, dann können Sie andere Lösungen erkunden.

Leider ist das Constraint-System in ios ziemlich schlecht, wenn es um komplexere Gleichungen mit mehr Views für eine einzige Constraint geht.

+0

+1 für die Erklärung der Komplexität in ios constraint, aber es löst nicht mein Problem, so kann Ihnen nicht die richtige Marke geben. –

+0

eigentlich meine Viewcontroller enthält die Scrollview möglicherweise dies wäre ein Problem –

+0

Ihr View-Controller hat immer noch eine Wurzel UIView nein? – jalone

0

UIScrollView kann beim Hinzufügen von Einschränkungen schwierig sein. Sie sollten immer eine subView hinzufügen, die sich wie die Inhaltsansicht für Ihre UIScrollView verhält, und alle nachfolgenden Ansichten werden in diese Inhaltsansicht eingefügt.

UIView1 
|---UIScrollView 
    |---UIContentView 
     |---UIView2 
     |---UIImageView 

Legen Sie Ihre UIScrollView Einschränkungen, wie Sie normalerweise aber Ihre Inhalte Ansicht verwenden würde haben, vorangestellten, oben und unten auf die UIScrollView sondern auch zwei weitere Einschränkungen hinzuzufügen, die gleiche Breite und die gleiche Höhe auf die viewController.view sein wird, aber wird eine niedrige Priorität haben (damit die Richtung, in die Ihr Inhalt steigt, diese Einschränkung bricht und automatisch die Inhaltsgröße der Bildlaufansicht erhöht, indem die abgeleitete Höhe der Inhaltsansicht berücksichtigt wird). Gehen Sie nun fort und fügen Sie allen Ihren subview Beschränkungen hinzu, wie Sie es normalerweise tun würden. Die ich gehe davon wäre:

  1. Ihre oberste Sicht von oben haben und Vorder- und Hinter seiner superView und auch eine feste Höhe.
  2. Ihre Ansicht von unten wird vorne, hinten und unten zu ihrem superView und auch eine feste Höhe haben.
  3. Ihr UIImageView wird eine führende, nachfolgende und von oben nach unten gerichtete Ansicht und die Ansicht von unten nach unten haben.

Edit: Hier ist der Screenshot für alle Fälle (Um die Ansichtshierarchie mit dem Inhalt nach Ansicht der Einschränkungen im Inspektor zu zeigen)

enter image description here

+0

Würde dies dem UIView keine fehlende Einschränkung geben? Das conentView und das imageView benötigen gegenseitig ihre eigene Höhe. – jalone

+0

Da die obere und untere Ansicht angehängt sind und eine feste Höhe haben, wird der verbleibende Platz mit der 'UIImageView' angepasst. Da die Inhaltsansicht dieselbe Höhe wie die gesamte Ansicht hat, enthält sie alle Einschränkungen, die die Inhaltsansicht benötigt, und bricht die gleiche Höhe bei Bedarf ab. Wenn OP ** atleast ** eine bestimmte Höhe oder ein vollständiges Bild haben soll, muss er eine Höhenbeschränkung der "UIImageView" machen und sie programmatisch mit der Höhe des Bildes aktualisieren. – Rikh

+0

Um eine Aussage von mir im vorherigen Kommentar zu ändern, eine Beschränkung von '> =' auch und das wird eine minimale ** Höhe ** sicherstellen und der Rest wird auf der Grundlage der Telefongröße herausgefunden. – Rikh

Verwandte Themen