将故事板从iPhone转换到iPad
我有一个iPhone
应用程序,它有一个故事板。 现在我想提供一个iPad
应用程序。 所以我问我是否有一个function可以帮助我将iPhone
故事板转换成iPad
故事板。
具体来说:
有没有类似的function,还是只有手动方式?
我发现了一种解决办法:
-
复制你的iPhone的故事板,并重命名为
MainStoryboard_iPad.storyboard
-
closuresXcode,然后打开这个文件的任何文本编辑器。
-
search
targetRuntime="iOS.CocoaTouch"
并将其更改为targetRuntime="iOS.CocoaTouch.iPad"
-
更改MainStoryboard_iPad.storyboard中的代码:
<simulatedScreenMetrics key="destination" type="retina4"/>
to<simulatedScreenMetrics key="destination"/>
-
现在保存所有内容并重新打开Xcode。 iPad-Storyboard与iPhone文件具有相同的内容,但每一个都可能是混乱的。
这节省了我的时间 – 希望这会帮助你
如果您创build了一个通用项目,默认情况下会创build空iPad故事板,您只需selectiPhone故事板全选(Command + A),复制(Command + C)并将其粘贴到iPad故事板上即可。 确保在编译之前将入口点从空的故事板移到新复制的故事板。
这对我来说并不合适。 我做了一些有点不同的事情。
- 为iPad版本创build一个新的故事板文件
- 打开新文件和我想要在textwrangler(文本编辑器)中复制的文件
- 将旧文件的xml文本复制到这些xml标记之间的新文件
- 第一个标签
<scenes> <!--Contents View Controller-->
- 粘贴在这里
- 结束标记
</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缩小一切。 让我然后把重点放在精细的调整。
-
将你的iPad故事板复制到一个新文件中。 (如iPhoneStoryboard.storyboard)
-
以复制的故事板文件名作为第一个参数运行下面的脚本。
-
将生成带有后缀_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的项目设置,则会显示以下对话框:
当我昨天遇到同样的问题时,我跟随了这个线程。 我遵循的步骤
- 对于Xcode 5.1,我必须做一些清理iPhone故事板,比如缺less表格单元格的重复标识符,为每个控制器提供故事板ID,删除未使用的场景。
- 将MainStoryboard_iPhone.storyboard复制到MainStoryboard_iPad.storyboard。
- 使用vi编辑器 – 将
targetRuntime="iOS.CocoaTouch"
更改为targetRuntime="iOS.CocoaTouch.iPad"
- 将MainStoryboard_iPad.storyboard中的代码从
<simulatedScreenMetrics key="destination" type="retina4"/>
simulationScreenMetrics<simulatedScreenMetrics key="destination" type="retina4"/>
更改为<simulatedScreenMetrics key="destination"/>
- 在Xcode中打开项目。
- 将部署设备更改为Universal – select不复制iPhone Storyboard的选项。
- Xcode将默认部署目标为7.1,照顾了弃用的function。
- 修复iPad Storyboard中错位的视图错误 – 更改控制器的框架布局给出错误。
就是这样..谢谢你的帮助..
最简单也是最可靠的方法就是从iPad故事板复制粘贴。
- 创build一个新的故事板,并将其命名为MainStoryboard_ipad。
- 通过在项目的“目标”属性的“摘要”页面上将“设备”属性设置为“通用”,使您的应用成为通用应用。
- 打开你的iPhone故事板,select全部并复制
- 打开你的iPad故事板并粘贴。
你必须去resize,但是比重新创build整个故事板要快。
对于支持大小类的Xcode版本,有一个非常简单的解决scheme(在Xcode 7中进行了testing,这是当前版本)。 勾选故事板文件( File Inspector )上的“使用大小类别”checkbox,确认出现的对话框。 然后取消select相同的checkbox – Xcode会询问您是否要使用iPhone或iPad的故事板,并适当地转换其中的屏幕。 不需要直接编辑故事板文件 。 对于iPad和iPhone,只需复制相同的故事板,并使用所描述的方法为iPadconfiguration一个,为iPhoneconfiguration一个。
而在有人build议使用大小class级之前 – 虽然很好,但对于大量定制的用户界面(如游戏等)则不太方便
一种不同的方法
-
在iPad-Storyboard中添加一个带有导航控制器的空视图控制器
-
将Class更改为用于iPhone的第一个ViewController的类,“fooViewController”
-
在第一个ViewController的iPhone-Storyboard“fooViewController_storyboard_identifier”中添加Storyboard-Identifier
-
转到“fooViewController.m”
-
添加boolvariablesbool
nibWasLoadForIpad=false
-
转到
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
-
只需复制
Main.storyboard
-
然后重命名文件到
Main_iPad.storyboard
和Main_iPone.storyboard
-
在
.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中使用它