将故事板从iPhone转换到iPad

我有一个iPhone应用程序,它有一个故事板。 现在我想提供一个iPad应用程序。 所以我问我是否有一个function可以帮助我将iPhone故事板转换成iPad故事板。

具体来说:

有没有类似的function,还是只有手动方式?

我发现了一种解决办法:

  1. 复制你的iPhone的故事板,并重命名为MainStoryboard_iPad.storyboard

  2. closuresXcode,然后打开这个文件的任何文本编辑器。

  3. searchtargetRuntime="iOS.CocoaTouch"并将其更改为targetRuntime="iOS.CocoaTouch.iPad"

  4. 更改MainStoryboard_iPad.storyboard中的代码:

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

    <simulatedScreenMetrics key="destination"/>

  5. 现在保存所有内容并重新打开Xcode。 iPad-Storyboard与iPhone文件具有相同的内容,但每一个都可能是混乱的。

这节省了我的时间 – 希望这会帮助你

如果您创build了一个通用项目,默认情况下会创build空iPad故事板,您只需selectiPhone故事板全选(Command + A),复制(Command + C)并将其粘贴到iPad故事板上即可。 确保在编译之前将入口点从空的故事板移到新复制的故事板。

这对我来说并不合适。 我做了一些有点不同的事情。

  1. 为iPad版本创build一个新的故事板文件
  2. 打开新文件和我想要在textwrangler(文本编辑器)中复制的文件
  3. 将旧文件的xml文本复制到这些xml标记之间的新文件
  4. 第一个标签<scenes> <!--Contents View Controller-->
  5. 粘贴在这里
  6. 结束标记</class> </classes>

这对我有效。 我有了一个全新的布局,所有的sockets连接起来,这一个小时节省了我几个小时。

从阅读stackoverflow上的很multithreading,我发现解决scheme是 –

1.复制你的iPhone的故事板,并重命名为MainStoryboard_iPad.storyboard

2.右键单击故事板 – >“打开为” – >“源代码”。

3.searchtargetRuntime =“iOS.CocoaTouch”并将其更改为targetRuntime =“iOS.CocoaTouch.iPad”

5.search<simulatedScreenMetrics key="destination" type="retina4"/>并将其更改为<simulatedScreenMetrics key="destination"/>

4.现在保存所有内容,右键单击MainStoryboard_iPad.storyboard“open as” – >“IOS StoryBoard”5.您可能还需要更改约束条件。 那就是你所做的一切。

 1. Create New Storyboard file with MainStoryboard_iPad.storyboard 2. Copy All the views from MainStoryboard and paste to MainStoryboard_iPad.storyboard 

1 – 创build您的"MainStoryboard_iPad.storyboard";

2 – 右键点击"MainStoryboard_iPhone.storyboard"和“打开为 – >源代码”。 复制一切;

3-右击"MainStoryboard_iPad.storyboard"和“打开为 – >源代码”。 粘贴一切。 现在search并更改:

  • 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 – 保存。 现在重新打开,但使用界面生成器。 你只需要重新安排。

这个方法也可以用于.xib文件

这是另一种方式,但我可以在我的iPad故事板(~35个场景)中进行select全部复制并粘贴到我的iPhone故事板中。 场景大小被自动调整。 我只看到两个问题,我必须更换UISplitViewController(因为它只有iPad),默认背景变得透明,而不是灰色(仍然在正确地修复,而不是手动设置背景的一切)。

编辑:看来UITableView在属性检查器的默认背景是相当奇怪的。 我不得不手动将背景设置为“分组表格视图背景颜色”为分组表格视图,“白色”为非分组表格视图。 然后它显示为“默认”(我假设,因为它然后匹配硬编码值)。 – 实际上,更容易,从“分组”改为“静态”,后面似乎重置默认颜色。

这是一些节省了我的时间,并可能帮助你的Python技能的东西。

我在过去的两个月里一直在构build一个应用程序,专注于iPad与团队的迭代。

今天的重点是构buildiPhone版本,遵循上面的步骤(谢谢!),但我不想在视觉故事板编辑器中调整iPad维度中的所有UI元素。

所以我写了这个小python jig脚本来扫描故事板文件的x,y,宽度,高度,并按比例320./768缩小一切。 让我然后把重点放在精细的调整。

  1. 将你的iPad故事板复制到一个新文件中。 (如iPhoneStoryboard.storyboard)

  2. 以复制的故事板文件名作为第一个参数运行下面的脚本。

  3. 将生成带有后缀_adjusted.storyboard的输出文件(例如iPhoneStoryboard.storyboard_adjusted.storyboard)

希望它有帮助…

 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() 

转到您的目标摘要,并将设备更改为通用,然后将其设置为您喜欢的任何故事板,包括复制和重命名,如果你喜欢。

正如对可能有这个问题的人的一个快速通知:

我的问题:

故事板内容很好地复制到我添加的新的电路板文件。 但是,它不会将更改到我的configuration的iPad。 注意到我不得不切换构build目标的指定故事板(见图),让更改显示。

我会张贴图像,如果我有点,但设置位于:

左侧源菜单中的项目导航器,项目(中央窗格)常规选项卡,(第二个子标题)部署信息的根目标,并选中了iPadbutton选项卡。

从那里,在“主界面”下select你的故事板。

感谢post,我希望这个提到可以帮助一个地方的障碍。

为了好玩,在XCode 5.1和iOS 7.1上,我还需要将“toolVersion”和“systemVersion”的值更改为:

 toolsVersion="5023" systemVersion="13A603" 

没有这个,新的故事板文件将不能编译

使用XCode6大小类别,您不再需要将故事板转换为iPad。 iPhone和iPad都可以使用相同的Storyboard,这样可以避免让两个文件保持最新状态。

由此产生的故事板是与iOS7 +兼容。

阅读更多关于这里: https : //developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/AboutAdaptiveSizeDesign.html#//apple_ref/doc/uid/TP40014436-CH6-SW1

使用大小类来启用故事板或xib文件以使用所有可用的屏幕大小。 这使您的应用程序的用户界面可以在任何iOS设备上工作。

这个function现在是内置的。 例如,如果将部署信息 – >设备从iPhone更改为Universal的项目设置,则会显示以下对话框:

在这里输入图像描述

当我昨天遇到同样的问题时,我跟随了这个线程。 我遵循的步骤

  1. 对于Xcode 5.1,我必须做一些清理iPhone故事板,比如缺less表格单元格的重复标识符,为每个控制器提供故事板ID,删除未使用的场景。
  2. 将MainStoryboard_iPhone.storyboard复制到MainStoryboard_iPad.storyboard。
  3. 使用vi编辑器 – 将targetRuntime="iOS.CocoaTouch"更改为targetRuntime="iOS.CocoaTouch.iPad"
  4. MainStoryboard_iPad.storyboard中的代码从<simulatedScreenMetrics key="destination" type="retina4"/> simulationScreenMetrics <simulatedScreenMetrics key="destination" type="retina4"/>更改为<simulatedScreenMetrics key="destination"/>
  5. 在Xcode中打开项目。
  6. 将部署设备更改为Universal – select不复制iPhone Storyboard的选项。
  7. Xcode将默认部署目标为7.1,照顾了弃用的function。
  8. 修复iPad Storyboard中错位的视图错误 – 更改控制器的框架布局给出错误。

就是这样..谢谢你的帮助..

最简单也是最可靠的方法就是从iPad故事板复制粘贴。

  1. 创build一个新的故事板,并将其命名为MainStoryboard_ipad。
  2. 通过在项目的“目标”属性的“摘要”页面上将“设备”属性设置为“通用”,使您的应用成为通用应用。 在这里输入图像描述
  3. 打开你的iPhone故事板,select全部并复制
  4. 打开你的iPad故事板并粘贴。

你必须去resize,但是比重新创build整个故事板要快。

对于支持大小类的Xcode版本,有一个非常简单的解决scheme(在Xcode 7中进行了testing,这是当前版本)。 勾选故事板文件( File Inspector )上的“使用大小类别”checkbox,确认出现的对话框。 然后取消select相同的checkbox – Xcode会询问您是否要使用iPhone或iPad的故事板,并适当地转换其中的屏幕。 不需要直接编辑故事板文件 。 对于iPad和iPhone,只需复制相同的故事板,并使用所描述的方法为iPadconfiguration一个,为iPhoneconfiguration一个。

而在有人build议使用大小class级之前 – 虽然很好,但对于大量定制的用户界面(如游戏等)则不太方便

一种不同的方法

  1. 在iPad-Storyboard中添加一个带有导航控制器的空视图控制器

  2. 将Class更改为用于iPhone的第一个ViewController的类,“fooViewController”

  3. 在第一个ViewController的iPhone-Storyboard“fooViewController_storyboard_identifier”中添加Storyboard-Identifier

  4. 转到“fooViewController.m”

  5. 添加boolvariablesbool nibWasLoadForIpad=false

  6. 转到viewDidLoad -Method

 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。知道的问题是,视图背景将被设置为白色)

对于Xcode10

  1. 只需复制Main.storyboard

  2. 然后重命名文件到Main_iPad.storyboardMain_iPone.storyboard

  3. .plist设置适当的名称

在这里输入图像描述

4.只需select合适的.storyboard进行configuration 在这里输入图像描述

你应该创build一个与苹果的错误报告。 你可以说这是我自2011年9月以来开放的(10167030)的副本。从我的观点来看令人沮丧的是,这个function在Xcode 3中存在…

谢谢大家的回答。

我遵循上述步骤,但是当我在模拟器或iPad下运行应用程序时,它只是使用iPhone故事板。

出于某种原因,当我将目标设备更改为Universal而不是iPhone时,Xcode(v5.0)没有更新app-Info.plist文件以包含iPad故事板,因此我必须手动添加以下条目使用Xcode中的plist编辑器):

主要故事板文件基本名称(iPad)==> MainStoryboard_iPad

我只是改变(另外从@tharkay的答案):

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

和伟大的作品!

我在XCode 8.3.3中使用它