Programmgesteuertes Erstellen der Einschränkung "Abstand zum nächsten Nachbarn"

8

Ein Teil des Bildschirms, den ich erstelle, enthält einen Abschnitt mit n views. Ich erzeuge diese Ansichten im Code - sie sind einfach UIView subclasses.

Ich verwende AutoLayout-Einschränkungen für diesen Bildschirm und möchte, dass sich jede Ansicht automatisch 15px oder so unterhalb der darüber liegenden Ansicht positioniert.

In Xcode ist es möglich, einen Abstand zur nächsten Nachbarschaftsbedingung , die genau das zu tun scheint, was ich will.

Ich kann jedoch keine Beispiele finden, die zeigen, wie man dies im Code erstellt.

Ist es möglich, programmatisch eine Einschränkung "Abstand zum nächsten Nachbarn" zu erstellen?

    
Josh Earl 12.02.2014, 20:08
quelle

3 Antworten

1

Sie können ein Integritätswörterbuch und eine Integritätszeichenfolge erstellen und sie programmgesteuert anwenden.

Das Hinzufügen von Elementen und Schlüsseln zum Wörterbuch ist trivial, daher werde ich nicht darauf eingehen. Denken Sie daran, dass jede Ansicht im Einschränkungssystem im Wörterbuch enthalten sein muss.

Das Erstellen der Formatzeichenfolge ist das interessante Bit. Vermutlich möchten Sie Ihre Ansichten als bestimmte Ansicht hinzufügen, sagen wir, dass sie den NSString-Schlüssel topView hat. Der erste Teil der Formatzeichenfolge sieht wie

aus %Vor%

Für jede Ansicht, die Sie hinzufügen möchten, fügen Sie diese Zeichenfolge

hinzu %Vor%

Wenden Sie finalString wie gewohnt an, eine konstruierte Visual Constraint Format-Zeichenfolge.

%Vor%     
Adam Eberbach 12.02.2014 21:26
quelle
1

Ich habe tatsächlich einige persönliche Übungen mit Auto-Layout und Animationen gemacht, als ich über deine Frage gestolpert bin und beschlossen habe, meine kleine Demo zu erweitern, die du hier herunterladen .

Wenn ich Sie richtig verstanden habe, kann ein Stück Code zur Inspiration verwendet werden. Mit geringem Aufwand könnte es auch mit dem Entfernen von Ansichten und auch mit dynamischer Höhe der Ansichten erweitert werden.

Bitte beachten Sie, dass mein Code eine Lösung mit und ohne Animation enthält - Letzteres ist natürlich einfacher.

%Vor%     
Jens Schwarzer 13.02.2014 11:51
quelle
0

Hier werden die Ansichten, die programmatisch generiert werden, zu einer übergeordneten Ansicht hinzugefügt. Wenn eine Ansicht erstellt wird, sollten ihre Einschränkungen hinzugefügt werden.

Aber die Einschränkungen müssen mit der vorherigen Ansicht verknüpft sein, und daher müssen wir die vorherige Ansicht (letzte Ansicht in der übergeordneten Ansicht) identifizieren

%Vor%

Der obige Code hilft Ihnen, die zuletzt erstellte Ansicht zu finden. Wenn Ansichten programmgesteuert erstellt und als Untersichten hinzugefügt werden, werden die Ansichten als Stapel für parrentView hinzugefügt. Daher ist die zuletzt erstellte Ansicht das letzte Objekt im Array subViewList

Hinweis: Angenommen, eine separate Ansicht wird als übergeordnete Ansicht ohne anfängliche Subviews zugewiesen.

%Vor%

Um die Größe der hinzugefügten Ansicht in Zukunft zu ändern, sollte sie durch Ändern ihrer BreiteConstraint oder heightConstraint erreicht werden, nur dann funktioniert die Einschränkung, die damit verbunden ist (um eine bestimmte Lücke beizubehalten). Die Größe sollte danach nicht mehr geändert werden. Bedeutung - Constraint-basierte Ansichten sollten nur mit Constraints behandelt werden.

Es ist möglich, eine Einschränkung "Abstand zum nächsten Nachbarn" erst zu erstellen, nachdem die erstellte Ansicht als Unteransicht hinzugefügt wurde.

Die Eigenschaft translatedAutoresizingMaskIntoConstraints der erstellten Ansicht sollte deaktiviert sein, damit es bei einer Änderung der Größe (der erstellten Ansicht) in Zukunft nicht zu einem Konflikt der Einschränkungen kommt.

    
Mithun R. 13.11.2014 22:06
quelle