2013-01-24 6 views
9

Mit iOS6 gibt es AutoLayout, ein auf Beschränkungen basierendes Layoutsystem. Ich denke, es ist vergleichbar mit den flexiblen XML-Layouts von Android.Warum haben 2 Storyboards bei AutoLayout?

Ich starte ein iOS6-Projekt und möchte Ihnen AutoLayout. Diese App wird universell sein. Es wird einige Ansichten geben, die zwischen zwei Gerätefamilien sehr ähnlich sind. Andere Ansichten auf dem iPad werden 2 oder mehr Controller in den iPhone-Ansichten sein.

Soweit ich weiß, können UIViewControllers mit anderen untergeordneten UIViewControllern eingerichtet werden. Dies bedeutet, dass es zwei Zutaten gibt, um eine universelle Ansicht in beiden Geräten zu erstellen.

Also meine Frage ist, warum ist ein Bedarf für 2 Storyboards? Ich kann sehen, dass das iPad-Storyboard einige zusätzliche Steuerelemente usw. hat. Es gibt auch Probleme bei der Skalierung der Schriftgrößen und anderer Variablen zwischen den beiden Gerätetypen. Kann jemand Tipps geben, wie du keine doppelten Ansichten auf 2 Storyboards haben und AutoLayout effizient nutzen kannst, um eine gute universelle App zu erhalten?

Sehr geschätzt.

+0

können Sie nicht! Sie müssen es beide verwenden. – TonyMkenu

+0

Nur weil es ein größeres Gerät ist, bedeutet es nicht, dass es nur die gleiche Benutzeroberfläche verwendet, sondern größer. Die gesamte Art der Verwendung des Geräts wechselt zwischen iPhone und iPad. UI-Konzepte sind völlig unterschiedlich. – Fogmeister

Antwort

8

iPad-UIs neigen dazu, nicht einfach vergrößerte Versionen von iPhone-UIs zu sein. Es ist mehr Bildschirmfläche zu verwenden, und es gibt benutzerdefinierte iPad-only-Schnittstellenelemente (z. B. UISplitViewController).

Wenn in Ihrem Fall die verschiedenen Geräte sehr ähnliche Layouts haben, dann könnten Sie ja ein Layout mit automatischen Layouts verwenden und es könnte ok funktionieren. Ich würde jedoch in den meisten Fällen davon abraten. Es ist klarer, nur zwei Layouts zu haben, eines für jede Art von Gerät.

Die endgültige Entscheidung liegt bei Ihnen. Vielleicht könnten Sie die Single-Layout-Strategie ausprobieren, indem Sie automatische Layouts verwenden und sehen, ob Sie auf bestimmte Probleme stoßen.

+1

Ich wünschte, ich könnte das wieder wiederholen. – Fogmeister

+0

Schon eine Weile, aber ich endete mit einer hybriden Lösung der Sorte. Ich habe ein iPad-Storyboard, um die iPad-Layouts zu erstellen. Einige der Anzeigen (UIViews) in den Storyboards sind leer. Ich habe eine Reihe von MasterIPadViewController, MasterIPhoneViewControllers, die einige clevere Ladeansichten von dem anderen Storyboard laden, wenn Outlets und Optionen eingestellt sind. Einige der iPad VCs erweitern das iPhone und fügen der Benutzeroberfläche zusätzliche Funktionen hinzu. Dies stellte eine maximale Wiederverwendung von Code und eine maximale Benutzeroberflächenflexibilität sicher. (60Hz ist der Name der App.) – dineth

+0

Ich arbeite auf iOS und Android.Das Fragment und einige der Java-Klassenhierarchie-Sachen bieten viel mehr Flexibilität, um Dinge wiederzuverwenden. Aber ja, sie kommen mit ihrer eigenen zusätzlichen Komplexität. Ich denke, dass meine nächste universelle App-Architektur ziemlich anders sein wird. – dineth

2

Es ist meine Erfahrung, dass es wahrscheinlich einfacher für Sie ist, die Storyboards nicht zu benutzen und alles programmatisch zu machen, aber das ist eher meinungsbasiert.

Ihre Frage ist ein wenig vage, aber meine Meinung wäre, Sichten mit Auto-Layouts wie erwähnt einzurichten, und dann einen Controller, der diese Ansichten verwendet. Was am Ende passiert, ist, dass Sie Ansichten innerhalb von Ansichten innerhalb eines Controllers haben, und dies wird Ihnen erlauben, alle Layouts zu steuern, während Sie in der Lage sind auszuwählen und auszuwählen, wo wo hingeht, abhängig von dem Gerät.

Es könnte etwas helfen, wenn Sie ein konkreteres Beispiel zum Ausführen gegeben haben. Ehrlich gesagt, interessiert mich das auch, und ich freue mich darauf, andere Ideen dazu zu sehen.

+0

Danke für deine Antwort. Ich habe ein paar Beispielprojekte gemacht, um zu testen, wie man so etwas erreichen kann, und ich habe daraus einen guten Erfolg erzielt. Ich denke, das verdient einen ganzen Blogbeitrag - den ich schreiben werde und hier eine Zusammenfassung als Antwort posten werde. Ich konnte nur 1 Storyboard laden. – dineth