iPad verschiedene XIB oder verschieben

  • iPad verschiedene XIB oder verschieben

    Hallo,

    ich habe relativ komplexe Screen's auf dem iPad welche sich je nach Ausrichtung an vielen Stellen deutlich unterscheiden.

    Z.B ist in der Portraitansicht ein Bild oben quer über den ganzen Bildschirm. Im Landscape wandert dieses Bild aus Platzgründen nach rechts und ist dann hochkant.

    Wie regelt man das normalerweise (idealerweise)? Mit verschiedenen XIB's oder verschiebt bzw. berechent man die Positionen neu?

    Gibt es vor und Nachteile wenn ich das eine oder andere benutze?


    Viele Grüße

    Copy
  • copy schrieb:

    Wie regelt man das normalerweise (idealerweise)? Mit verschiedenen XIB's oder verschiebt bzw. berechent man die Positionen neu?

    Du kannst die Views auch in ein XIB packen oder sogar in einen View und die nicht benötigten Teile unsichtbar schalten. Statt Outlets musst Du dann allerdings Outlet-Collections verwenden.
    „Meine Komplikation hatte eine Komplikation.“
  • Ich habe dies bisher im Code gemacht, d.h. ich habe im IB das Layout für den Portrait Modus erstellt, welches als Default Layout für den ViewController verwendet wird.

    Dann habe ich mir im IB noch das Layout für den Landscape Modus erstellt und mir die Positionen und Größen der einzelnen UI Elemente ermittelt. Diese Positionen/Größen, sowie die Default Positionen/Größen, verwende ich dann im Code, um das Layout für die jeweilige Orientation anzupassen. Funktioniert bisher sehr gut.

    Ich wundere mich aber auch, warum Apple hierfür nicht mal eine vernünftige Lösung mit individuellen Layouts für jede Orientation in einem XIB anbietet.
  • MCDan schrieb:

    Ich wundere mich aber auch, warum Apple hierfür nicht mal eine vernünftige Lösung mit individuellen Layouts für jede Orientation in einem XIB anbietet.

    Wahrscheinlich sind gerade die Outlets das Problem. Mit Autolayout wird das Ganze wieder spannend. Da kann man dann Restriktionen ändern und damit das Layout dann viel flexibler anpassen.
    „Meine Komplikation hatte eine Komplikation.“
  • Theoretisch könnte man den IB doch so erweitern, dass man ein Layout für den Portrait und den Landscape Mode erstellen könnte. Die jeweiligen Positionen/Größen der UI Elemente würden dann im XIB gespeichert und automatisch im ViewController beim Rotate verwendet.

    Da könnte man mal drüber nachdenken so etwas zu realisieren und mit etwas Glück wird man dann von Apple für ein paar Millionen aufgekauft :) oder einfach kopiert. :(
  • MCDan schrieb:

    Theoretisch könnte man den IB doch so erweitern, dass man ein Layout für den Portrait und den Landscape Mode erstellen könnte. Die jeweiligen Positionen/Größen der UI Elemente würden dann im XIB gespeichert und automatisch im ViewController beim Rotate verwendet.

    Da könnte man mal drüber nachdenken so etwas zu realisieren und mit etwas Glück wird man dann von Apple für ein paar Millionen aufgekauft :) oder einfach kopiert. :(

    Sicher wäre das nett. Es ist aber wahrscheinlich sehr kompliziert zu realisieren. Wenn die Views beispielsweise ein Textfeld enthalten, was Du im Hochformat setzt, wie soll Cocoa Touch dann wissen, dass es auch das im Querformat setzen muss. Auslesen ist ähnlich lustig.

    Interessant wäre, wenn man die Layoutinformationen getrennt von den Views speichern könnte. Dann könnte man den View im Hochformat designen und zusätzlich die Infos für das Querformat ablegen. Cocoa Touch bräuchte dann bei der Drehung nur noch die richtigen Transitionen bzw. Animationen berechnen. Mit Autolayouts sollte man das aber programmatisch zumindest hinbekommen.
    „Meine Komplikation hatte eine Komplikation.“
  • Ich würde ja auch für beide Ausrichtungen die selben UI Elemente verwenden und nur die Positionen/Größen für die jeweilige Ausrichtung speichern. Bei einem Rotate würde der ViewController dann einfach die Positionen/Größen der UI Elemente für die jeweilige Ausrichtung automatisch setzten. Sollte doch eigentlich keine große Erweiterung für den IB und den UIViewController sein.

    Wenn man nicht einen kompletten IB programmieren müsste, würde ich dies ja gerne mal ausprobieren. Evtl. würde es ja auch ausreichen, wenn es eine App gibt, die ein XIB laden und anzeigen kann. Dann könnte man darin nur die Positionen/Größen der vorhandenen UI Elemente für die jeweils andere Ausrichtung einstellen und das XIB mit diesen Infos wieder speichern.

    BTW: Git es eine offizielle Doku von Apple zum Aufbau der XML für ein XIB?
  • MCDan schrieb:

    BTW: Git es eine offizielle Doku von Apple zum Aufbau der XML für ein XIB?

    Habe ich bislang noch nicht gesehen. Durch die ganzen Referenzen und Kodierungen sehen die auch gruselig aus und Storyboards scheinen auch noch ein eigenes, davon abweichendes Format zu haben.

    Das ist allenfalls was zum Spielen. Darauf bauen würde ich nicht.
    „Meine Komplikation hatte eine Komplikation.“