2017-01-25 1 views
0

Ich habe ein Projekt in XCode 8.2.1, Swift 3, dass ich eine Menge von UILabels, UIButtons und UITextFields habe, die eine Menge Daten (Formulare im Wesentlichen) zeigen. Die App ist nur für iPad, nur für die Landschaft und auf 9.0 und höher ausgerichtet.XCode 8.2.1 Autolayout: Probleme mit ausgelasteten, bevölkerten UIViewControllern

Ich habe versucht, manuell Einschränkungen zuzuweisen (was eine Menge Zeit dauert) und ich habe versucht, die IDE "Adding Constraints" und "Reset to Suggested Constraints" in den Storyboards. Wenn ich alle Beschränkungen aus dem VC entferne, bekommt es fast die "Form", aber ein paar Dinge sind immer noch fehl am Platz.

Ich mache nichts in ViewDidLoad() oder eine andere Positionierung bezogen Codierung.

Hier ein Screenshot von meinem Storyboard ist: enter image description here

Und hier ist der gleiche UIViewController in dem iPad Air 2 (iOS Version 10.2) Simulator mit dem vorgeschlagenen Einschränkungen: Storyboard rendered using reset/suggested constraints

a) Wie sollte man Gehen Sie mit Auto-Layout mit einer Menge von Kontrollen benötigt, wo Abstand und Ausrichtung ist von wesentlicher Bedeutung? b) Warum skaliert XCode Tasten und Bedienelemente, denen ich Größen ausdrücklich zuweise? Ich muss die Größe immer wieder ändern, wenn das Storyboard wieder geöffnet wird.

Schätzen Sie alle Vorschläge. Mind-betäubt und ich verschwende viel mehr Zeit mit Layout als Funktionalität gegenüber 7.3 und älter.

+0

Sie müssen die Kugel beißen Angst, vielleicht Abschnitte in ihre eigenen Unteransichten zu brechen, so dass logische Abschnitte automatisch gegenüber anderen Abschnitten, statt die Verfolgung jedes Element der Benutzeroberfläche gegen die anderen – Fonix

Antwort

1

Dies ist ein Beispiel dafür, wie ich einen ziemlich komplexen Bildschirm in einer iPad-App zerlegt habe.

enter image description here

Die Hauptansicht besteht aus zwei Behältern Ansichten. Der Container auf der linken Seite enthält einen UIableViewContoller, der auf der rechten Seite einen UIViewController. Der UIViewController selbst bettet dann einen anderen UITableViewController ein. Jeder Controller kommuniziert notwendige Änderungen, um die Container-Kette durch Delegierte zu sichern.

Dies ermöglicht mir, das Layout innerhalb jedes Containerabschnitts viel besser zu steuern, da Sie weniger Einschränkungen für einen bestimmten Controller haben.

Zweitens, möglicherweise haben Sie einige Mega-Controller-Klasse, die die gesamte Logik für all die Ansichten steuert, die Sie dort gestopft haben. Wenn Sie sie in ihre eigenen Controller aufteilen, können Sie die Mega-Klasse in separate Klassen aufteilen, die nur ihren Teil der Benutzeroberfläche steuern, wodurch besser lesbarer und verkapselter Code entsteht.

+0

Definiert Komplexität aufgrund Verkettung, macht aber durchaus Sinn. Sollte ich bemerkt haben, dass ich ein paar Container UIViews in meinem Layout habe, aber das ist ein Schritt weiter. Ich werde diese Route versuchen und melden. Danke, Mann. –

+0

Letztendlich denke ich, dass dies die wahrscheinlichste Lösung ist, "die für die Zeit arbeitet, die man hineinlegen muss". Danke für den Vorschlag. Für jetzt gehe ich ohne Autolayout, da es eine Enterprise App ist, also habe ich eine enge Zielliste zur Unterstützung. Hab einen halben Tag damit verbracht, Dinge in Subviews im Controller zu gruppieren, und das hat geholfen, aber es immer noch unhandlich gemacht, ganz zu schweigen von der Schwierigkeit, etwas Neues hinzuzufügen. Autolayout funktioniert gut für einige Ansichten, aber es ist die Hölle für andere. –

+0

Hoffentlich hilft dir zumindest die Idee auf die Dauer, wenn du die App nach und nach umgestaltest.Die einzige andere Sache, die helfen könnte, wäre Stapelansichten zu verwenden, aber mit all den Ansichten, die Sie haben, kann das Verschachteln so vieler Stapelansichten genauso viel Kopfzerbrechen bereiten. Viel Glück! – Frankie

Verwandte Themen