Frage

Ich habe immer meine UIS im Code gemacht, aber habe entschieden, dass ich Storyboards und Auto-Layout für ein aktuelles Projekt verwenden sollte. Alles war gut gelaufen, bis ich eine komplexe Szene mit etwa 50 Ansichten mit viel Hierarchie und einigen Ansichten baute.

Das Problem ist, dass mein Auto-Layout auf einigen Geräten und Orientierungen zusammengefasst wird. Ich finde es herausfordernd, IB zu verwenden, um die Dutzenden (Hunderte?) Von Einschränkungen zu fixieren oder die Probleme aufzuspüren und sie aufzulösen. Die Situation ist so, dass ich keine Fehler oder Warnungen habe, nur einige unangenehme Layouts manchmal. Und ib kann ein Schmerz mit allen Klick- und Ändern von Einstellungen sein, die Sie tun müssen, um Constraint-Informationen zu verfolgen, geschweige denn eine vollständige Vorstellung davon, wie sie alle in einer Szene beziehen.

Ich habe gerade einen Tag damit verbracht, Dokumente und Hintergrundmaterial auf Automatiklayout und Einschränkungen zu lesen, und es scheint, dass meine beste Lösung das visuelles Format verwenden soll, um Einschränkungen in Code anzugeben und einen benutzerdefinierten Code zu erstellen, der helfen soll. Ich kann jedoch nichts finden, wie er den Übergang von IB zum Code erstellen kann.

Insbesondere sollte ich alle IB-Einschränkungen abwischen und alle von Hand tun oder ist es möglich, selektiv zu sein? Ich frage, weil ich einige Gruppen von Ansichten habe, wenn die Ansichten der Inhalte ein perfektes Layout enthält.

Zweitens, wo ersteige ich meinen Code? Ich möchte, dass Sie Storyboards koexistieren und nur einige komplexe Szenen selektiv ändern möchten. Ist ein View-Controller von ViewWillipAppear: Der richtige Ort, um Einschränkungen für die Ansicht-Kontrollen zu ändern oder zu entfernen / hinzuzufügen / hinzufügen?

War es hilfreich?

Lösung 2

Es tut mir leid, dass es so lange dauert, dass andere Projekte eindringen.

Ich musste viel Refactoring tun, um meine Szenen so zu vereinfachen, dass das Auto-Layout das Richtige tun könnte, und doch bin ich mit den Ergebnissen nicht vollständig zufrieden. Das Problem scheint, dass IB mit vielen Gegenständen einfach nicht einfach zu bedienen ist, und dass das automatische Layout durch Notwendigkeit kompliziert ist.

mit diesem Artikel, die ich bisher gesehen habe, werden von diesem Artikel von Justin Driscoll: http://themainthread.com/blog/2014/02/building-a-universal-app.html

er befürwortet das Gebäude benutzerdefinierte Ansichten, um wiederverwendbare UI-Komponenten einzukapseln. Ich habe diesen Ansatz genommen, habe aber die Idee erweitert, um auch zusammenhängende Komponenten zu bündeln, die nicht anders laden, wenn sich das Layout ändert. Zum Beispiel habe ich eine Fortschrittsleiste mit Knopf- und zwei Etiketten, auch wenn ich sie nicht als Gruppe wiederverwendete, müssen sie benachbart sein und konzeptionell zusammenhängen, sodass ich eine benutzerdefinierte Ansicht für sie erstellt habe Layout als Justin vermuten lassen.

Ich nehme nun den Ansatz an, den jede Ebene des automatischen Layouts nur eine Handvoll Elemente haben sollte. Wenn eine Ebene zu komplex wird, bündel ich einige verwandte Elemente in einer benutzerdefinierten Ansicht und drücken Sie in dieser neuen Ansicht ein automatisches Layout. Bis jetzt ist es nicht so schlimm.

Andere Tipps

Anschließen eines IBoutlet für den NSLAYOUTCONTAING Sie möchten in der Storyboard- / XIB-Datei an Ihre Controller- / Ansichtsklasse ändern können.

Wenn Sie das angeschlossene Layout-Objekt angeschlossen haben, können Sie die .constant-Eigenschaft ändern und die Ansicht animieren:

generasacodicetagpre.

Aktualisiert: Sie können Ihren Änderungscode in ViewDIDLOAD, AWAKEFROMNIB, SEVIEDDIDAPPEARE oder EVENT-basieren.Es hängt wirklich von Ihren Absichten ab.

Auto-Layout kann bei der Verwendung dieser vielen Ansichten wirklich schwierig sein.Ich habe ähnlich komplexe Ansichten-Strukturen verwendet, und ich finde, dass es am besten versucht, alle Einschränkungen in Code oder in IB zu halten.Im Moment behalten wir sie in Ib.Das einzige Mal, dass wir eine Einschränkung in den Code bringen, ist, wenn wir eine andere Bildschirmgröße unterstützen, und wir müssen eine einzelne Einschränkung für den Ansicht ändern, um richtig zu arbeiten.Ich habe die Einschränkungen immer in ViewDIDLOAD selbst geändert.

Wenn etwas durcheinander bringt, muss ich fast immer alle Einschränkungen in dieser Ansicht nuke und anfangen.Es saugt, aber es ist oft schneller, als das Problem zu verfolgen.Eine Sache, die wir tun, macht es leichter, mit dieser Art von Dingen umzugehen, um .xibs zusammen mit Ihrem Storyboard zu verwenden.Auf diese Weise kann jede Ansicht das eigene Layout umgehen, und Sie können das in eine Ansicht ziehen, die in einem Storyboard sitzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top