J'ai une application iPhone
qui a un storyboard. Maintenant, je veux aussi fournir une application iPad
. Je me suis donc demandé s'il existait une fonction qui m'aiderait à convertir mon storyboard iPhone
en un storyboard iPad
.
Pour être précis:
Y a-t-il une fonction similaire ou n'y a-t-il que la manière manuelle?
J'ai découvert une sorte de solution:
Dupliquez votre iPhone-Storyboard et renommez-le MainStoryboard_iPad.storyboard
Fermez Xcode puis ouvrez ce fichier n’importe quel éditeur de texte.
Recherchez targetRuntime="iOS.CocoaTouch"
et remplacez-le par targetRuntime="iOS.CocoaTouch.iPad"
Modifiez le code dans MainStoryboard_iPad.storyboard à partir de:
<simulatedScreenMetrics key="destination" type="retina4"/>
à
<simulatedScreenMetrics key="destination"/>
Maintenant, sauvegardez tout et rouvrez Xcode. Le iPad-Storyboard a le même contenu que le fichier iPhone, mais tout peut être dérangé.
Cela m'a permis d'économiser des heures - j'espère que cela vous aidera
Si vous aviez créé un projet universel, un storyboard iPad vide aurait été créé par défaut. Assurez-vous de déplacer le point d'entrée du storyboard vide vers le storyboard récemment copié avant la compilation.
Cela n'a pas tout à fait fonctionné pour moi. J'ai fait quelque chose d'un peu différent.
<scenes> <!--Contents View Controller-->
</class> </classes>
Cela a fonctionné pour moi. J'ai eu une nouvelle mise en page avec tous mes points de vente connectés, ce qui m'a permis de gagner quelques heures.
1. Create New Storyboard file with MainStoryboard_iPad.storyboard
2. Copy All the views from MainStoryboard and paste to MainStoryboard_iPad.storyboard
En lisant de nombreux threads sur stackoverflow, j’ai découvert la solution:
1.Dupliquez votre iPhone-Storyboard et renommez-le MainStoryboard_iPad.storyboard
2. Cliquez sur le storyboard -> «Ouvrir en tant que» -> «Code source».
3.Recherchez targetRuntime = "iOS.CocoaTouch" et remplacez-le par targetRuntime = "iOS.CocoaTouch.iPad"
5.Recherchez <simulatedScreenMetrics key="destination" type="retina4"/>
et remplacez-le par <simulatedScreenMetrics key="destination"/>
4.Enregistrez tout et faites un clic droit sur MainStoryboard_iPad.storyboard "open as" -> "IOS StoryBoard" 5. vous devrez peut-être également modifier vos contraintes ... C'est tout ce que vous avez fait.
1 - Créez votre "MainStoryboard_iPad.storyboard";
2 - Cliquez avec le bouton droit de la souris sur "MainStoryboard_iPhone.storyboard"
et "Ouvrir en tant que -> Code source". Copier tout
3- Faites un clic droit sur vous "MainStoryboard_iPad.storyboard"
et "Ouvrir en tant que -> Code source". Coller tout. Maintenant Rechercher et changer:
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 - Enregistrer. Maintenant rouvrez mais en utilisant le constructeur d'interface. Vous n'aurez qu'à réorganiser.
Cette méthode peut aussi être utilisée pour les fichiers .xib
Cela va dans l'autre sens, mais j'ai pu faire un tri sélectif dans mon storyboard iPad (~ 35 scènes) et le coller dans mon storyboard iPhone. Les tailles de scène ont été ajustées automatiquement. Je n'ai vu que deux problèmes, j'ai dû remplacer UISplitViewController (puisqu'il ne s'agit que d'iPad) et l'arrière-plan par défaut est devenu transparent au lieu de gris (je travaille toujours sur la correction correcte, sans définir manuellement l'arrière-plan).
EDIT: Il semble que l’arrière-plan par défaut de UITableView dans l’inspecteur Attributs soit plutôt étrange. Je devais définir manuellement l'arrière-plan sur "Couleur d'arrière-plan de la vue de groupe de groupe" pour les vues de table groupées et sur "Couleur blanche" pour les vues de table non groupées. Il était ensuite affiché comme "Par défaut" (je suppose car il correspondait alors à une valeur codée en dur). - En fait, même plus facile, passer de "Groupé" à "Statique" et inversement semble réinitialiser la couleur par défaut.
Voici quelque chose qui m'a permis d'économiser des heures et qui pourrait aider ceux d'entre vous qui maîtrisent le langage Python.
Je construis une application depuis deux mois, axée uniquement sur l'itération de l'expérience utilisateur avec l'équipe.
Aujourd'hui concentré sur la construction de la version iPhone, j'ai suivi les étapes ci-dessus (merci!), Mais je ne voulais pas ensuite redimensionner tous les éléments de l'interface utilisateur dans les dimensions de l'iPad dans l'éditeur de storyboard visuel.
J'ai donc écrit ce petit script python pour analyser le fichier de scénarimage afin de déterminer les dimensions x, y, largeur, hauteur et de réduire le rapport de 320./768. Permettez-moi alors de me concentrer simplement sur des ajustements précis.
Copiez votre storyboard iPad dans un nouveau fichier. (par exemple, iPhoneStoryboard.storyboard)
Exécutez le script ci-dessous avec le nom de fichier de scénario copié comme premier paramètre.
Générera un fichier de sortie avec le suffixe _adjusted.storyboard (par exemple, iPhoneStoryboard.storyboard_adjusted.storyboard)
J'espère que ça aide...
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()
Juste comme une note rapide à ceux qui pourraient avoir eu mon problème avec ceci:
Mon problème:
Le contenu du storyboard a été copié dans un nouveau fichier de tableau que j'ai ajouté. Cependant, cela ne modifierait pas mon iPad fourni. Remarquant que je devais basculer sur le storyboard désigné pour la cible de construction (voir image), laissez les modifications apparaître.
Je posterais une image si j'avais les points, mais le réglage est situé dans:
Navigateur de projet dans le menu source de gauche, cible générale du projet (volet central), informations de déploiement (deuxième en-tête), avec l'onglet du bouton iPad sélectionné.
A partir de là, choisissez votre storyboard sous "interface principale".
Merci pour le post, j'espère que cette mention aide un problème quelque part.
Accédez à votre résumé de cible et changez les périphériques en universal, Puis réglez la version de l'ipad sur le story-board de votre choix, y compris celui copié et renommé si vous le souhaitez.
Avec les classes de taille XCode6, il n’est plus nécessaire de convertir le storyboard en iPad. Le même Storyboard peut être utilisé à la fois pour l'iPhone et l'iPad, ce qui vous évite de conserver deux fichiers à jour.
Le storyboard résultant est compatible avec iOS7 +.
En savoir plus sur ce sujet ici: { https://developer.Apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/AboutAdaptiveSizeDesign.html#//Apple_ref/doc/uid/TP40014436-CH6- SW1
Utilisez des classes de taille pour permettre à un fichier de storyboard ou xib de fonctionner avec toutes les tailles d'écran disponibles. Cela permet à l'interface utilisateur de votre application de fonctionner sur n'importe quel appareil iOS.
Juste pour le plaisir, sur XCode 5.1 et iOS 7.1, je devais également modifier les valeurs de "toolVersion" et "systemVersion" en ceci:
toolsVersion="5023" systemVersion="13A603"
Sans cela, le nouveau fichier de storyboard ne serait pas compilé
Cette fonctionnalité est maintenant intégrée. Par exemple, si l’on modifie les paramètres du projet dans Deployment Info -> Devices from iPhone to Universal, la boîte de dialogue suivante s’affiche:
J'ai suivi ce fil quand j'ai eu le même problème hier. Les pas que j'ai suivis
targetRuntime="iOS.CocoaTouch"
en targetRuntime="iOS.CocoaTouch.iPad"
<simulatedScreenMetrics key="destination" type="retina4"/>
à <simulatedScreenMetrics key="destination"/>
C'était ça .. Merci à tous pour votre aide ..
Pour ce faire, le moyen le plus simple et le plus fiable consiste à copier-coller de votre storyboard iPad.
Vous devrez redimensionner, mais cela peut être plus rapide que de recréer le storyboard en entier.
Ajouter un contrôleur de vue vide avec un contrôleur de navigation dans le Storyboard iPad
Changez la classe en classe de votre premier ViewController utilisé pour iPhone, "fooViewController"
Ajoutez le Storyboard-Identifier dans le Storyboard iPhone "fooViewController_storyboard_identifier" pour le premier ViewController.
Allez à "fooViewController.m"
Ajouter bool Variable bool nibWasLoadForIpad=false
Aller à la méthode viewDidLoad
-
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. Le problème, c’est que le fond de la vue sera blanc)
Il existe une solution très simple pour les versions de Xcode qui prennent en charge les classes de taille (Testé dans Xcode 7, qui est la version actuelle au moment de la rédaction). Cochez la case à cocher "utiliser des classes de taille" d'un fichier de storyboard (Inspecteur de fichier), confirmez la boîte de dialogue qui apparaît. Décochez ensuite} cette même case à cocher - Xcode vous demandera si vous souhaitez utiliser ce scénarimage avec un iPhone ou un iPad et y convertir les écrans de manière appropriée. _ {Pas besoin de modifier directement le fichier de storyboard} _. Pour iPad et iPhone, copiez simplement le même scénario et configurez-en un pour iPad et un pour iPhone en utilisant la méthode décrite.
Et avant que quelqu'un suggère d'utiliser des classes de taille - bien qu'elles soient géniales, elles sont moins pratiques pour une interface utilisateur fortement personnalisée, telle que les jeux, etc.
Vous devez créer un rapport de bogue avec Apple. Vous pouvez dire qu'il s'agit d'un duplicata du mien (10167030) ouvert depuis septembre 2011. Ce qui est frustrant de mon point de vue, c'est que la fonctionnalité existait dans Xcode 3 ...
Merci pour les réponses tout le monde.
J'ai suivi les étapes ci-dessus, mais lorsque j'ai exécuté l'application sous le simulateur ou sur mon iPad, elle n'a cessé d'utiliser que le storyboard de l'iPhone.
Pour une raison quelconque, lorsque j'ai remplacé le périphérique cible par Universal au lieu d'un iPhone, Xcode (v5.0) n'a pas mis à jour le fichier app-Info.plist afin d'inclure le storyboard iPad. J'ai donc dû ajouter manuellement l'entrée suivante ( en utilisant l'éditeur de plist dans Xcode):
Nom de base du fichier du storyboard principal (iPad) ==> MainStoryboard_iPad
Je viens de changer (en plus de la réponse de @tharkay):
<device id="ipad9_7" orientation="landscape">
et fonctionne très bien!
J'utilise ceci dans XCode 8.3.3