Ich habe ein Projekt für iPhone und iPad. Das iPad benötigt einen Split View Controller. Erstellen wir zwei separate Storyboards? Eine für iPhone (mit Auto-Layout können wir alle Geräte unterstützen) und zwei für iPad. Mein Zweifel ist der Unterschied es nur in der ersten Sicht. Die Innenansichten wiederholen sich. Wie wird dein Ansatz mit dem Storyboard aussehen?Müssen wir 2 Storyboard für eine Universal-App verwenden?
Antwort
Keine zwei Storyboards mehr in iOS 8 erforderlich! Wir können Adaptive UI benutzen, um das gleiche Storyboard auf alle verschiedenen Größen von iPad und iPhone zuzuschneiden.
Sie können http://www.raywenderlich.com/83276/beginning-adaptive-layout-tutorial
hier ein schönes Tutorial Und Sie können auch ein schönes Video von Apple in WWDC-Konferenz here und die Suche nach „Building Adaptive Apps mit UIKit“
Grundsätzlich können wir verschiedene handhaben finden Bildschirmgrößen durch Definition von Elementen unserer Benutzeroberfläche im Storyboard für verschiedene Größenklassen. Wir können auch verschiedene Auto-Layout-Einschränkungen für verschiedene Größenklassen definieren.
Und das sind alle möglichen Größenklassen in iOS 8 (Ich habe das Bild von https://medium.com/@getaaron/ios-8-development-tips-for-iphone-6-and-iwatch-1c772554ffe0)
Auf iOS 8, Sie brauchen nicht zwei Storyboards, da eine einzige Storyboard sowohl iPhone umgehen kann und iPad; Außerdem wird UISplitViewController auf dem Telefon unter diesem Betriebssystem unterstützt.
Für frühere Versionen von iOS benötigen Sie zwei Storyboards.
Für iOS 7 und früher, ja, verwenden Sie zwei Storyboards und zwei völlig unterschiedliche Schnittstellen, da es keinen Split-View-Controller auf dem iPhone gibt.
Verwenden Sie für iOS 8 ein Storyboard und verwenden Sie den UISplitViewController sowohl auf dem iPad als auch auf dem iPhone. Erstellen Sie ein neues Projekt aus der Universal-Version der Xcode 6 Master-Detail App-Vorlage, um alles darüber zu sehen, wie es funktioniert! Es ist automatisch ein Split-View-Controller auf dem iPad und eine Navigationsoberfläche auf dem iPhone.
Und hier ist mein Beispiel, das zeigt, wie man die ganze Sache für iOS 8 im Code erstellt, wenn man das Storyboard nicht benutzen will: https://github.com/matnteub/Programming-iOS-Book-Examples/tree/master/bk2ch09p488basicMasterDetail/MasterDetail – matt
Sie können viel mehr als nur zwei Storyboards haben. Wenn Sie die Klassengröße/das automatische Layout nicht anpassen können, um die Aufgabe eines zwischen iPhone und iPad freigegebenen View-Controllers zu erfüllen, können Sie diesen Teil in separate Storyboards aufteilen. Sie können dann ein drittes Storyboard erstellen, das die freigegebenen View-Controller enthält. Sie können dieses Storyboard dann in Code instanziieren und es zum Instanziieren seiner View-Controller verwenden.
Ich schaffte es, dieses Szenario (Split-Controller in einem universellen Storyboard, das sowohl auf iOS8 als auch auf iOS7 funktioniert) zu haben, indem ich auf iOS7 und iPhone ein anderes Segment anrufe. Mein Szenario ist wie folgt:
Ich habe einen Login-Controller, der zu einem Hauptcontroller (modally) segue soll.
Wenn ich auf iOS8 oder iPad bin, benutze ich einen Segue-Punkt zum Split-View-Controller, während ich auf iOS7-iPhone ein anderes Segment benutze, das direkt auf den linken Nav-Controller des Split-Controllers zeigt (komplett umgangen).
Wenn Sie vom linken Controller ein Detail-Segment haben, das auf den rechten Nav-Controller zeigt (und Sie sollten) und wenn der Segment-Typ "Show Detail" ist (und es sollte), wird es wie ein normales Push-In funktionieren die iOS7-iPhone-Umgebung (was genau wir wollen).
Auf etwas, was ich jedoch bemerkte, wird der Ziel-Controller des Detail-Segments im IOS7-iPhone-Szenario zum Root-View-Controller des rechten Nav (obwohl das Segment auf das Nav zeigt), wenn Sie also Code haben die prepareForSegue
Sie benötigen sie passen sie anders zu behandeln)
(zur Bestimmung, ob die Plattform IOS8 ist, und wenn ich auf dem iPhone/iPad Idiom ich benutze den Standard
[[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0 and UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
Selbst mit adaptiver UI Persönlich bevorzuge ich es, auf einem anderen Storyboard zu arbeiten, für komplexes Layout ist es einfacher und es wird nicht einfacher Setzen Sie das Layout für andere Bildschirmgrößen außer Kraft. Zu viele Einschränkungen können die Wartung schwieriger machen. Wenn Sie die Objekthierarchie verschieben, wird das Layout für den anderen Bildschirm unterbrochen.
Als Bonus, wenn Sie mit Low-Level-Mac wie Mackbook Air oder Old Mac arbeiten, reduzieren Sie auch die Ladezeit und erhalten eine bessere Reaktionsfähigkeit, wenn Sie mit Storyboard arbeiten.
- 1. müssen wir eine Zeigervalidierung für gcnew erstellen
- 2. Angular 2 - warum müssen wir ngForm verwenden, wenn wir benutzerdefinierte Validierung verwenden?
- 3. Müssen wir eine Struktur malloc?
- 4. In welcher Situation müssen wir `multiprocessing.Pool.imap_unordered` verwenden?
- 5. Wann müssen wir float.PositiveInfinity und float.NegativeInfinity verwenden?
- 6. Warum müssen wir ./ für die Ausführung Shell-Skript verwenden
- 7. Müssen wir jemals Iteratoren in ArrayList verwenden?
- 8. Warum müssen wir NSAutoreleasepool für jeden Thread verwenden?
- 9. Müssen wir immer ein asynchrones Schlüsselwort verwenden?
- 10. Wann müssen wir [Browsable (true)] verwenden?
- 11. Müssen wir * .xcuserstate einchecken?
- 12. Wenn wir Anbieter in Angular 2 verwenden?
- 13. Wann müssen wir den überprüften Operator in C# verwenden?
- 14. Warum müssen wir verwenden, außer und "?" zusammen statt, wenn allein
- 15. wenn wir Bündel verwenden müssen: Sperren und Entsperren auf rails3
- 16. Wann müssen wir java.sql.Connection.rollback() aufrufen?
- 17. Wann müssen wir implizite und explizite Operatoren in C# verwenden?
- 18. Wann müssen wir das externe Alias-Schlüsselwort in C# verwenden?
- 19. Warum müssen wir State Monad anstelle von State direkt verwenden?
- 20. Wann müssen wir $ digest() in der realen Entwicklung verwenden?
- 21. Müssen wir __weak self in UIAnimationBlocks in ARC verwenden?
- 22. Warum müssen wir vor() warten()?
- 23. warum müssen wir „link“ Tag für CSS-Dateien
- 24. Für SOAP, müssen wir Client-Stubs von WSDL generieren?
- 25. Wann müssen wir die NDK für OpenCV Android
- 26. müssen wir Variablen in TCL "deaktivieren"?
- 27. Warum müssen wir eval JSON Klammern hinzufügen?
- 28. Müssen wir JAR für das JDK-Upgrade kompilieren?
- 29. Warum müssen wir useTestNG() für Tests mit Gradle angeben?
- 30. Warum müssen wir alles auf eine char * konvertieren, wenn wir es in eine Datei schreiben?
Danke für die Links! –