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?
Ich habe eine Art Lösung gefunden:
Dupliziere dein iPhone-Storyboard und benenne es in MainStoryboard_iPad.storyboard
um.
Schließen Sie Xcode und öffnen Sie diese Datei dann mit einem beliebigen Texteditor.
Suche nach targetRuntime="iOS.CocoaTouch"
und ändere es in targetRuntime="iOS.CocoaTouch.iPad"
Ändern Sie den Code im MainStoryboard_iPad.storyboard von:
<simulatedScreenMetrics key="destination" type="retina4"/>
an
<simulatedScreenMetrics key="destination"/>
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
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.
Das hat für mich nicht ganz funktioniert. Ich habe etwas anders gemacht.
<scenes> <!--Contents View Controller-->
</class> </classes>
Das hat bei mir funktioniert. Ich bekam ein neues Layout mit allen meinen Filialen, was allein mir ein paar Stunden erspart hat.
1. Create New Storyboard file with MainStoryboard_iPad.storyboard
2. Copy All the views from MainStoryboard and paste to MainStoryboard_iPad.storyboard
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.
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
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.
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.
Kopieren Sie Ihr iPad-Storyboard in eine neue Datei. (z. B. iPhoneStoryboard.storyboard)
Führen Sie das folgende Skript mit dem kopierten Storyboard-Dateinamen als ersten Parameter aus.
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()
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.
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.
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.
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
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:
Ich bin diesem Thread gefolgt, als ich gestern mit derselben Ausgabe getroffen wurde. Die Schritte, denen ich folgte
targetRuntime="iOS.CocoaTouch"
in targetRuntime="iOS.CocoaTouch.iPad"
geändert <simulatedScreenMetrics key="destination" type="retina4"/>
in <simulatedScreenMetrics key="destination"/>
Das war es .. Vielen Dank für Ihre Hilfe ..
Der einfachste und zuverlässigste Weg, dies zu tun, ist das Kopieren von Einfügen aus Ihrem iPad-Storyboard.
Sie müssen die Größe ändern, aber es kann schneller sein, als das gesamte Storyboard neu zu erstellen.
Fügen Sie im iPad-Storyboard einen leeren View-Controller mit Navigations-Controller hinzu
Ändern Sie die Klasse in die Klasse Ihres ersten für iPhone verwendeten ViewControllers "fooViewController".
Fügen Sie den Storyboard-Identifier im iPhone-Storyboard "fooViewController_storyboard_identifier" für den ersten ViewController hinzu
Gehe zu "fooViewController.m"
Bool hinzufügen Variable bool nibWasLoadForIpad=false
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
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 ...
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
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