wake-up-neo.net

Storyboard vom iPhone auf das iPad konvertieren

Ich habe eine iPhone-Anwendung, die über ein Storyboard verfügt. Jetzt möchte ich auch eine iPad-Anwendung bereitstellen. Also habe ich mich gefragt, ob es eine Funktion gibt, die mir hilft, mein iPhone-Storyboard in ein iPad-Storyboard zu konvertieren.

Um genau zu sein:

Gibt es eine ähnliche Funktion oder gibt es nur den manuellen Weg?

214
dehlen

Ich habe eine Art Lösung gefunden:

  1. Dupliziere dein iPhone-Storyboard und benenne es in MainStoryboard_iPad.storyboard um.

  2. Schließen Sie Xcode und öffnen Sie diese Datei dann mit einem beliebigen Texteditor.

  3. Suche nach targetRuntime="iOS.CocoaTouch"und ändere es in targetRuntime="iOS.CocoaTouch.iPad"

  4. Ändern Sie den Code im MainStoryboard_iPad.storyboard von: 

    <simulatedScreenMetrics key="destination" type="retina4"/> an

    <simulatedScreenMetrics key="destination"/>

  5. Speichern Sie jetzt alles und öffnen Sie Xcode erneut. Das iPad-Storyboard hat den gleichen Inhalt wie die iPhone-Datei, jedoch könnte alles anders sein.

Das hat mir Stunden gespart - hoffentlich hilft Ihnen das

533
tharkay

Wenn Sie ein universelles Projekt erstellt haben, wäre standardmäßig ein leeres iPad-Storyboard erstellt worden. Sie müssen lediglich das iPhone-Storyboard auswählen, alle auswählen (Befehlstaste + A), kopieren (Befehlstaste + C) und auf das iPad-Storyboard einfügen. Stellen Sie sicher, dass Sie den Einstiegspunkt vor dem Kompilieren vom leeren Storyboard auf das neu kopierte Storyboard verschieben.

60
Malls

Das hat für mich nicht ganz funktioniert. Ich habe etwas anders gemacht.

  1. Erstellen Sie eine neue Storyboard-Datei für die iPad-Version
  2. Öffne sowohl die neue Datei als auch die Datei, die ich in Textwrangler (Texteditor) kopieren möchte
  3. Kopieren Sie den XML-Text aus der alten Datei in die neue Datei zwischen diesen XML-Tags
  4. Erstes Tag <scenes> <!--Contents View Controller-->
  5. Hier einfügen
  6. End-Tags </class> </classes>

Das hat bei mir funktioniert. Ich bekam ein neues Layout mit allen meinen Filialen, was allein mir ein paar Stunden erspart hat. 

10
Nelson Brian
1. Create New Storyboard file with MainStoryboard_iPad.storyboard
2. Copy All the views from MainStoryboard and paste to MainStoryboard_iPad.storyboard
8
Kirit Vaghela

Durch das Lesen vieler Threads in stackoverflow habe ich festgestellt, dass die Lösung

1.Duplizieren Sie Ihr iPhone-Storyboard und benennen Sie es in MainStoryboard_iPad.storyboard um

2.Klicken Sie mit der rechten Maustaste auf das Storyboard -> "Öffnen als" -> "Quellcode". 

3.Suchen Sie nach targetRuntime = "iOS.CocoaTouch" und ändern Sie es in targetRuntime = "iOS.CocoaTouch.iPad".

5.Suchen Sie nach <simulatedScreenMetrics key="destination" type="retina4"/> und ändern Sie ihn in <simulatedScreenMetrics key="destination"/>.

4. Speichern Sie jetzt alles und klicken Sie mit der rechten Maustaste auf MainStoryboard_iPad.storyboard unter "Öffnen als" -> "IOS StoryBoard" 5. Sie müssen möglicherweise auch Ihre Einschränkungen ändern. Das ist alles, was Sie getan haben.

8
Bharat

1 - Erstelle deinen "MainStoryboard_iPad.storyboard";

2 - Klicken Sie mit der rechten Maustaste auf "MainStoryboard_iPhone.storyboard" und "Öffnen als -> Quellcode". Alles kopieren;

3- Klicken Sie mit der rechten Maustaste auf Sie "MainStoryboard_iPad.storyboard" und "Öffnen als -> Quellcode". Alles einfügen. Jetzt suchen und ändern:

  • targetRuntime="iOS.CocoaTouch" to targetRuntime="iOS.CocoaTouch.iPad"
  • type="com.Apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" to type="com.Apple.InterfaceBuilder3.CocoaTouch.Storyboard.iPad.XIB"

4 - Speichern. Jetzt erneut öffnen, aber den Interface Builder verwenden. Sie müssen nur neu arrangieren.

Diese Methode kann auch für .xib-Dateien verwendet werden

6
Ricardo Anjos

Dies ist der umgekehrte Weg, aber ich konnte alles auswählen und in mein iPad-Storyboard kopieren (~ 35 Szenen) und es in mein iPhone-Storyboard einfügen. Die Szenengrößen wurden automatisch angepasst. Ich habe nur zwei Probleme gesehen, ich musste UISplitViewController ersetzen (da es nur ein iPad ist), und der Standardhintergrund wurde transparent anstatt grau (dies funktioniert immer noch richtig, ohne den Hintergrund manuell einzustellen).

BEARBEITEN: Der Standardhintergrund für UITableView im Attribut-Inspektor scheint ziemlich seltsam zu sein. Ich musste den Hintergrund für gruppierte Tabellensichten auf "Gruppentabellenansicht-Hintergrundfarbe" und "Weiße Farbe" für nicht gruppierte Tabellensichten manuell einstellen. Es wurde dann als "Default" angezeigt (ich gehe davon aus, dass es dann einem fest codierten Wert entspricht). - Noch einfacher: Der Wechsel von "Gruppiert" zu "Statisch" und zurück scheint die Standardfarbe zurückzusetzen.

5
Symmetric

Hier ist etwas, was mir Stunden erspart hat und Ihnen mit Python-Fähigkeiten vielleicht helfen könnte.

Ich habe in den letzten zwei Monaten eine App entwickelt, die sich auf das iPad konzentriert und die UX mit dem Team durchläuft. 

Heute konzentrierte sich der Schwerpunkt auf die Entwicklung der iPhone-Version. Ich folgte den oben genannten Schritten (Danke!), Aber ich wollte nicht alle UI-Elemente von iPad-Abmessungen im visuellen Storyboard-Editor anpassen.

Also habe ich dieses kleine Python-Jig-Skript geschrieben, um die Storyboard-Datei nach x, y, Breite, Höhe zu durchsuchen und alles im Verhältnis 320./768 zu verkleinern. Daraufhin durfte ich mich nur noch auf Feinjustierungen konzentrieren. 

  1. Kopieren Sie Ihr iPad-Storyboard in eine neue Datei. (z. B. iPhoneStoryboard.storyboard)

  2. Führen Sie das folgende Skript mit dem kopierten Storyboard-Dateinamen als ersten Parameter aus. 

  3. Erzeugt eine Ausgabedatei mit dem Suffix _adjusted.storyboard (z. B. iPhoneStoryboard.storyboard_adjusted.storyboard)

Ich hoffe es hilft...

import re
import sys
import math

afile = sys.argv[1]

scale = 320./768.

number_pattern = '[-0-9]+(.[0-9]+)?'
#width_pattern = 'width="[-0-9]+( ?px)?"'
width_pattern = 'width="[-0-9]+(.[0-9]+)?( ?px)?"'
height_pattern = 'height="[-0-9]+(.[0-9]+)?( ?px)?"'
x_pattern = 'x="[-0-9]+(.[0-9]+)?( ?px)?"'
y_pattern = 'y="[-0-9]+(.[0-9]+)?( ?px)?"'


def replacescaledvalue(scale,pattern,sometext,replacefmt) :
    ip = re.search(pattern, sometext, re.IGNORECASE)
    if(ip) :
        np = re.search(number_pattern,ip.group(0))
        if(np) :
            val = float(np.group(0))
            val = int(math.floor(val*scale))
            sval = replacefmt+str(val)+'"'#+'px"'
            newtext = re.sub(pattern,sval,sometext)
            return newtext
    else :
        return sometext

fin = open(afile)
fout = open(afile+"_adjusted.storyboard", "wt")
for line in fin:
    newline = line
    newline = replacescaledvalue(scale,width_pattern,newline,'width="')
    newline = replacescaledvalue(scale,height_pattern,newline, 'height="')
    newline = replacescaledvalue(scale,x_pattern,newline, 'x="')
    newline = replacescaledvalue(scale,y_pattern,newline, 'y="')
#   print newline
    fout.write( newline )

fin.close()
fout.close()
4
Chris Robertson

Nur eine kurze Notiz an diejenigen, die mein Problem damit hatten:

Meine Ausgabe:

Der Inhalt des Storyboards wurde in eine neue Boarddatei kopiert, die ich hinzugefügt habe. Es würde jedoch keine Änderungen an meinem bereitgestellten iPad vornehmen. Als ich bemerkte, dass ich das angegebene Storyboard für das Build-Ziel umstellen musste (siehe Abbildung), werden die Änderungen angezeigt. 

Ich würde ein Bild posten, wenn ich die Punkte hätte, aber die Einstellung befindet sich in: 

Projektnavigator im Quellmenü auf der linken Seite, Stammziel des Projekts (mittlerer Bereich), allgemeine Registerkarte, (zweiter Unterüberschrift), Bereitstellungsinformationen, wobei die iPad-Schaltfläche ausgewählt ist.

Wählen Sie dort Ihr Storyboard unter "Hauptschnittstelle" aus. 

Danke für den Beitrag, ich hoffe, diese Erwähnung hilft irgendwo. 

3
dgetzin

Gehen Sie zu Ihrer Zielzusammenfassung und ändern Sie die Geräte in universal, Gehen Sie dann zu Standart und setzen Sie die ipad-Version auf ein beliebiges Storyboard, einschließlich eines kopierten und umbenannten, wenn Sie möchten.

3
AMAN77

Mit den XCode6-Größenklassen müssen Sie das Storyboard nicht mehr in ein iPad konvertieren. Das gleiche Storyboard kann sowohl für das iPhone als auch für das iPad verwendet werden, sodass Sie nicht zwei Dateien auf dem neuesten Stand halten müssen.

Das resultierende Storyboard ist mit iOS7 + kompatibel.

Lesen Sie hier mehr dazu: https://developer.Apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/AboutAdaptiveSizeDesign.html#//Apple_ref/doc/uid/TP40014436-CH6-SW1

Größenklassen verwenden, um zu ermöglichen, dass eine Storyboard- oder Xib-Datei mit allen verfügbaren Bildschirmgrößen funktioniert. Dadurch kann die Benutzeroberfläche Ihrer App auf jedem iOS-Gerät ausgeführt werden.

3
Ciprian Rarau

Nur zum Spaß musste ich auf XCode 5.1 und iOS 7.1 die Werte von "toolVersion" und "systemVersion" folgendermaßen ändern:

toolsVersion="5023" systemVersion="13A603"

Ohne dies würde die neue Storyboard-Datei nicht kompiliert werden

3
TooManyEduardos

Diese Funktionalität ist jetzt integriert. Wenn Sie beispielsweise die Projekteinstellungen in Bereitstellungsinfo -> Geräte vom iPhone in Universal ändern, wird das folgende Dialogfeld angezeigt:

enter image description here

2
Freddie

Ich bin diesem Thread gefolgt, als ich gestern mit derselben Ausgabe getroffen wurde. Die Schritte, denen ich folgte 

  1. Für Xcode 5.1 musste ich das iPhone-Storyboard bereinigen, z. B. fehlende reuseIdentifiers von Table-Zellen, Storyboard-ID für jeden Controller angeben, nicht verwendete Szenen entfernen. 
  2. Kopieren Sie MainStoryboard_iPhone.storyboard in MainStoryboard_iPad.storyboard.
  3. Mit dem vi-Editor - targetRuntime="iOS.CocoaTouch" in targetRuntime="iOS.CocoaTouch.iPad" geändert 
  4. Ändern Sie den Code im MainStoryboard_iPad.storyboard von: <simulatedScreenMetrics key="destination" type="retina4"/> in <simulatedScreenMetrics key="destination"/> 
  5. Öffnen Sie das Projekt in Xcode.
  6. Deployment-Geräte in Universal geändert - Wählen Sie die Option, das iPhone-Storyboard NICHT zu kopieren.
  7. Xcode setzt das Bereitstellungsziel standardmäßig auf 7.1, kümmerte sich um die veralteten Funktionen.
  8. So beheben Sie den falsch platzierten Ansichtsfehler im iPad Storyboard: Das Rahmenlayout für Controller wurde geändert, wodurch Fehler angezeigt werden. 

Das war es .. Vielen Dank für Ihre Hilfe ..

2
Shaina Prakash

Für Xcode10 

  1. Einfach Main.storyboard kopieren 

  2. Benennen Sie die Dateien dann in Main_iPad.storyboard und Main_iPone.storyboard um. 

  3. Legen Sie geeignete Namen in .plist fest.

 enter image description here

4.Wählen Sie einfach das richtige zu konfigurierende .storyboard aus  enter image description here

2
Svitlana

Der einfachste und zuverlässigste Weg, dies zu tun, ist das Kopieren von Einfügen aus Ihrem iPad-Storyboard.

  1. Erstellen Sie ein neues Storyboard und nennen Sie es etwa MainStoryboard_ipad.
  2. Machen Sie Ihre App zu einer Universal-App, indem Sie die Devices-Eigenschaft auf der Seite Zusammenfassung der Zieleigenschaften für Ihr Projekt auf Universal festlegen.enter image description here
  3. Öffne dein iPhone Storyboard und wähle alles aus und kopiere
  4. Öffne dein iPad Storyboard und füge es ein.

Sie müssen die Größe ändern, aber es kann schneller sein, als das gesamte Storyboard neu zu erstellen.

1
mcohen75

Ein anderer Versuch

  1. Fügen Sie im iPad-Storyboard einen leeren View-Controller mit Navigations-Controller hinzu

  2. Ändern Sie die Klasse in die Klasse Ihres ersten für iPhone verwendeten ViewControllers "fooViewController".

  3. Fügen Sie den Storyboard-Identifier im iPhone-Storyboard "fooViewController_storyboard_identifier" für den ersten ViewController hinzu

  4. Gehe zu "fooViewController.m" 

  5. Bool hinzufügen Variable bool nibWasLoadForIpad=false

  6. Gehen Sie zu viewDidLoad- Methode

if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && !nibWasLoadForIpad)
{
    nibWasLoadForIpad=true;
    UIStoryboard* Storyboard_iphone=[UIStoryboard storyboardWithName:@"Main_iPhone" bundle: nil];
    fooViewController *controller = [Storyboard_iphone instantiateViewControllerWithIdentifier:@"fooViewController_storyboard_identifier"];
    [self.navigationController pushViewController:controller animated:YES];
    self.modalPresentationStyle = UIModalPresentationCurrentContext;
}

(ps. Problem ist, dass die Ansichtshintergründe auf weiß gesetzt werden)

Es gibt eine wirklich einfache Lösung für Xcode-Versionen, die Größenklassen unterstützen (Getestet in Xcode 7, der aktuellen Version zum Zeitpunkt des Schreibens). Markieren Sie das "Größenklassen verwenden" Kontrollkästchen in einer Storyboard-Datei (Dateiinspektor), und bestätigen Sie den angezeigten Dialog. Deaktivieren Sie anschließend das gleiche Kontrollkästchen. - Xcode fragt Sie, ob Sie dieses Storyboard mit einem iPhone oder iPad verwenden möchten, und konvertiert die Bildschirme entsprechend. Sie müssen die Storyboard-Datei nicht direkt bearbeiten . Kopieren Sie für iPad und iPhone dasselbe Storyboard und konfigurieren Sie eines für iPad und eines für iPhone mithilfe der beschriebenen Methode.

Und bevor jemand die Verwendung von Größenklassen vorschlägt - obwohl sie großartig sind, sind sie für stark angepasste Benutzeroberflächen wie Spiele etc. Weniger geeignet

1
GreatWiz

Sie sollten einen Fehlerbericht mit Apple erstellen. Sie können sagen, es ist ein Duplikat von mir (10167030), das seit September 2011 geöffnet ist. Aus meiner Sicht ist es frustrierend, dass das Feature in Xcode 3 vorhanden war ...

0

Danke für die Antworten.

Ich habe die oben genannten Schritte befolgt, aber als ich die App unter dem Simulator oder meinem iPad ausgeführt habe, hat sie nur das iPhone-Storyboard verwendet.

Aus irgendeinem Grund habe Xcode (v5.0) nicht die App-Info.plist-Datei mit dem iPad-Storyboard aktualisiert, wenn ich das Zielgerät in Universal anstelle von iPhone geändert habe. Daher musste ich den folgenden Eintrag manuell hinzufügen ( mit dem plist-Editor in Xcode):

Hauptname der Storyboard-Datei (iPad) ==> MainStoryboard_iPad

0
Pete

Ich ändere nur (zusätzlich zur Antwort von @tharkay):

 <device id="ipad9_7" orientation="landscape">

und funktioniert super! 

Ich verwende dies in XCode 8.3.3

0
Beto