我有一个 iPhone 应用程序,它有一个故事板 . 现在我想提供一个 iPad 应用程序 . 所以我问我是否有一个功能可以帮助我将 iPhone 故事板转换为 iPad 故事板 .
iPhone
iPad
再具体一点:
Is there a similar function or is there only the manual way ?
我只是改变了(除了@tharkay的回答):
<device id="ipad9_7" orientation="landscape">
而且效果很好!
我在XCode 8.3.3中使用它
你应该创建一个bug report with Apple.你可以说它是我的重复(10167030),自2011年9月以来一直开放 . 从我的观点来看令人沮丧的是Xcode 3中存在的这个特征......
1 - 创建你的 "MainStoryboard_iPad.storyboard";
"MainStoryboard_iPad.storyboard";
2 - 右键单击您 "MainStoryboard_iPhone.storyboard" 和"Open as -> Source Code" . 复制一切;
"MainStoryboard_iPhone.storyboard"
3-右键单击 "MainStoryboard_iPad.storyboard" 和"Open as -> Source Code" . 粘贴一切 . 现在搜索并更改:
"MainStoryboard_iPad.storyboard"
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版创建新的故事板文件
打开新文件和我要在textwrangler中复制的文件(文本编辑器)
将旧文件中的xml文本复制到这些xml标记之间的新文件中
第一个标签 <scenes> <!--Contents View Controller-->
<scenes> <!--Contents View Controller-->
粘贴在这里
结束标签 </class> </classes>
</class> </classes>
这对我有用 . 我得到了一个新的布局,连接了我的所有插座,仅此一个小时就节省了我的时间 .
通过读取stackoverflow上的许多线程,我发现解决方案是 -
1.复制你的iPhone-Storyboard并将其重命名为MainStoryboard_iPad.storyboard
2.右键单击故事板 - >“打开” - >“源代码” .
3.搜索targetRuntime =“iOS.CocoaTouch”并将其更改为targetRuntime =“iOS.CocoaTouch.iPad”
5.搜索 <simulatedScreenMetrics key="destination" type="retina4"/> 并将其更改为 <simulatedScreenMetrics key="destination"/>
<simulatedScreenMetrics key="destination" type="retina4"/>
<simulatedScreenMetrics key="destination"/>
4.现在保存所有内容并右键单击MainStoryboard_iPad.storyboard“打开” - >“IOS StoryBoard”5 . 您可能还需要更改约束 . 多数民众赞成你所做的一切 .
对于Xcode10
只需复制 Main.storyboard
Main.storyboard
然后将文件重命名为 Main_iPad.storyboard 和 Main_iPone.storyboard
Main_iPad.storyboard
Main_iPone.storyboard
在 .plist 中设置适当的名称
.plist
4.只需选择正确的.storyboard来配置
最简单,最可靠的方法是从iPad故事板中复制粘贴 .
创建一个新的故事板并将其命名为MainStoryboard_ipad .
通过在项目的“目标”属性的“摘要”页面上将“设备”属性设置为“通用”,使您的应用成为通用应用 .
打开iPhone故事板并选择全部并复制
打开iPad故事板并粘贴 .
您将不得不重新调整大小,但它可能比重新创建整个故事板更快 .
谢谢大家的答案 .
我按照上面的步骤操作,但是当我在模拟器或iPad下运行应用程序时,它只使用iPhone故事板 .
出于某种原因,当我将目标设备更改为Universal而不是iPhone时,Xcode(v5.0)没有更新app-Info.plist文件以包含iPad故事板,因此我不得不手动添加以下条目(使用Xcode中的plist编辑器:
主故事板文件基名(iPad)==> MainStoryboard_iPad
1. Create New Storyboard file with MainStoryboard_iPad.storyboard 2. Copy All the views from MainStoryboard and paste to MainStoryboard_iPad.storyboard
使用XCode6大小类,您不再需要将故事板转换为iPad . 同一个Storyboard可用于iPhone和iPad,使您无法保持两个文件的最新状态 .
生成的故事板与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设备上运行 .
转到目标摘要并将设备更改为通用,然后下载并将ipad版本设置为您喜欢的任何故事板,包括复制和重命名的故事板(如果您愿意) .
只是为了好玩,在XCode 5.1和iOS 7.1上我还需要将“toolVersion”和“systemVersion”的值更改为:
toolsVersion="5023" systemVersion="13A603"
如果没有这个,新的故事板文件将无法编译
这是另一回事,但我能够在我的iPad故事板(约35个场景)中进行全选和复制并将其粘贴到我的iPhone故事板中 . 场景大小自动调整 . 我只看到了两个问题,我不得不更换UISplitViewController(因为它只是iPad),默认背景变为透明而不是灰色(仍在正确修复,无需手动设置所有背景) .
编辑:似乎属性检查器中UITableView的默认背景是相当奇怪的 . 我必须手动将背景设置为分组表视图的“组表视图背景颜色”,并为非分组表视图设置“白色颜色” . 然后它显示为“默认”(我假设它然后匹配硬编码值) . - 实际上,甚至更容易,从“Grouped”更改为“Static”,然后返回似乎重置默认颜色 .
我昨天遇到同样问题的时候跟着这个帖子 . 我遵循的步骤
对于Xcode 5.1,我不得不对iPhone故事板进行一些清理,比如缺少表格单元的reuseIdentifiers,为每个控制器提供故事板ID,删除未使用的场景 .
将MainStoryboard_iPhone.storyboard复制到MainStoryboard_iPad.storyboard .
使用vi编辑器 - 将 targetRuntime="iOS.CocoaTouch" 更改为 targetRuntime="iOS.CocoaTouch.iPad"
targetRuntime="iOS.CocoaTouch"
targetRuntime="iOS.CocoaTouch.iPad"
将 MainStoryboard_iPad.storyboard 中的代码从: <simulatedScreenMetrics key="destination" type="retina4"/> 更改为 <simulatedScreenMetrics key="destination"/>
在Xcode中打开项目 .
将部署设备更改为通用 - 选择不复制iPhone故事板的选项 .
Xcode将默认部署目标设为7.1,负责已弃用的功能 .
修复iPad故事板中错误放置的视图错误 - 更改了控制器的框架布局,给出了错误 .
就是这样..感谢大家的帮助..
我发现了一种解决方案:
复制您的iPhone-Storyboard并重命名 MainStoryboard_iPad.storyboard
MainStoryboard_iPad.storyboard
关闭Xcode然后打开该文件任何文本编辑器 .
搜索 targetRuntime="iOS.CocoaTouch" 并将其更改为 targetRuntime="iOS.CocoaTouch.iPad"
更改MainStoryboard_iPad.storyboard中的代码:
<simulatedScreenMetrics key="destination" type="retina4"/> 来
这节省了我的时间 - 希望这对你有所帮助
此功能现在已内置 . 例如,如果将部署信息 - >设备中的项目设置从iPhone更改为通用,则会显示以下对话框:
对于支持大小类的Xcode版本,有一个非常简单的解决方案(在Xcode 7中测试,这是编写本文时的当前版本) . Check 故事板文件(文件检查器)上的 "use size classes" 复选框,确认出现的对话框 . Then uncheck 同样的复选框 - Xcode将询问您是否要将此故事板与iPhone或iPad一起使用,并适当地转换其中的屏幕 . No need to directly edit the storyboard file . 对于iPad和iPhone,只需复制相同的故事板,并使用所述方法为iPad配置一个,为iPhone配置一个 .
在有人建议使用大小类之前 - 虽然很好,但它们对于大量定制的UI(例如游戏等)来说不太方便
正如对那些可能遇到我的问题的人的快速记录:
我的问题:
故事板内容很好地复制到我添加的新板文件中 . 但是,它不会对我配置的iPad进行更改 . 注意到我必须切换构建目标的指定故事板(参见图像),让更改显示 .
如果我有分数,我会发布图像,但设置位于:
左侧源菜单上的项目导航器,项目的根目标(中心窗格)常规选项卡,(第二个子 Headers )部署信息,选择了iPad按钮选项卡 .
从那里,选择“主界面”下的故事板 .
谢谢你的帖子,我希望这个提到有助于在某个地方找到障碍 .
如果您已经创建了一个通用项目,默认情况下会创建空的iPad故事板,您只需选择iPhone故事板选择全部(命令A),复制(命令C)并将其粘贴到iPad故事板上 . 确保在编译之前将入口点从空故事板移动到新复制的故事板 .
这些东西节省了我几个小时,可能会帮助那些有Python技能的人 .
我在过去的两个月里一直在构建一个应用程序,专注于iPad与团队一起迭代UX .
今天专注于构建iPhone版本,按照上面的步骤(谢谢!)但我不想在视觉故事板编辑器中调整iPad尺寸的所有ui元素 .
所以我写了这个小的python jig脚本来扫描storyboard文件中的x,y,width,height并按比例缩放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()
在iPad-Storyboard中添加带有Navigation-Controller的空视图控制器
将Class更改为用于iPhone的第一个ViewController的类,“fooViewController”
为第一个ViewController在iPhone-Storyboard“fooViewController_storyboard_identifier”中添加Storyboard-Identifier
转到“fooViewController.m”
添加bool变量bool nibWasLoadForIpad=false
nibWasLoadForIpad=false
转到 viewDidLoad -Method
viewDidLoad
if(UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPad &&!nibWasLoadForIpad){nibWasLoadForIpad = TRUE;UIStoryboard * Storyboard_iphone = [UIStoryboardstoryboardWithName:@“Main_iPhone”包:nil];fooViewController * controller = [Storyboard_iphone instantiateViewControllerWithIdentifier:@“fooViewController_storyboard_identifier”];[self.navigationController pushViewController:controller animated:YES];self.modalPresentationStyle = UIModalPresentationCurrentContext;}
(ps . 知道问题是视图背景将设置为白色)
21 回答
我只是改变了(除了@tharkay的回答):
而且效果很好!
我在XCode 8.3.3中使用它
你应该创建一个bug report with Apple.你可以说它是我的重复(10167030),自2011年9月以来一直开放 . 从我的观点来看令人沮丧的是Xcode 3中存在的这个特征......
1 - 创建你的
"MainStoryboard_iPad.storyboard";
2 - 右键单击您
"MainStoryboard_iPhone.storyboard"
和"Open as -> Source Code" . 复制一切;3-右键单击
"MainStoryboard_iPad.storyboard"
和"Open as -> Source Code" . 粘贴一切 . 现在搜索并更改: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版创建新的故事板文件
打开新文件和我要在textwrangler中复制的文件(文本编辑器)
将旧文件中的xml文本复制到这些xml标记之间的新文件中
第一个标签
<scenes> <!--Contents View Controller-->
粘贴在这里
结束标签
</class> </classes>
这对我有用 . 我得到了一个新的布局,连接了我的所有插座,仅此一个小时就节省了我的时间 .
通过读取stackoverflow上的许多线程,我发现解决方案是 -
1.复制你的iPhone-Storyboard并将其重命名为MainStoryboard_iPad.storyboard
2.右键单击故事板 - >“打开” - >“源代码” .
3.搜索targetRuntime =“iOS.CocoaTouch”并将其更改为targetRuntime =“iOS.CocoaTouch.iPad”
5.搜索
<simulatedScreenMetrics key="destination" type="retina4"/>
并将其更改为<simulatedScreenMetrics key="destination"/>
4.现在保存所有内容并右键单击MainStoryboard_iPad.storyboard“打开” - >“IOS StoryBoard”5 . 您可能还需要更改约束 . 多数民众赞成你所做的一切 .
对于Xcode10
只需复制
Main.storyboard
然后将文件重命名为
Main_iPad.storyboard
和Main_iPone.storyboard
在
.plist
中设置适当的名称4.只需选择正确的.storyboard来配置
最简单,最可靠的方法是从iPad故事板中复制粘贴 .
创建一个新的故事板并将其命名为MainStoryboard_ipad .
通过在项目的“目标”属性的“摘要”页面上将“设备”属性设置为“通用”,使您的应用成为通用应用 .
打开iPhone故事板并选择全部并复制
打开iPad故事板并粘贴 .
您将不得不重新调整大小,但它可能比重新创建整个故事板更快 .
谢谢大家的答案 .
我按照上面的步骤操作,但是当我在模拟器或iPad下运行应用程序时,它只使用iPhone故事板 .
出于某种原因,当我将目标设备更改为Universal而不是iPhone时,Xcode(v5.0)没有更新app-Info.plist文件以包含iPad故事板,因此我不得不手动添加以下条目(使用Xcode中的plist编辑器:
主故事板文件基名(iPad)==> MainStoryboard_iPad
使用XCode6大小类,您不再需要将故事板转换为iPad . 同一个Storyboard可用于iPhone和iPad,使您无法保持两个文件的最新状态 .
生成的故事板与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设备上运行 .
转到目标摘要并将设备更改为通用,然后下载并将ipad版本设置为您喜欢的任何故事板,包括复制和重命名的故事板(如果您愿意) .
只是为了好玩,在XCode 5.1和iOS 7.1上我还需要将“toolVersion”和“systemVersion”的值更改为:
如果没有这个,新的故事板文件将无法编译
这是另一回事,但我能够在我的iPad故事板(约35个场景)中进行全选和复制并将其粘贴到我的iPhone故事板中 . 场景大小自动调整 . 我只看到了两个问题,我不得不更换UISplitViewController(因为它只是iPad),默认背景变为透明而不是灰色(仍在正确修复,无需手动设置所有背景) .
编辑:似乎属性检查器中UITableView的默认背景是相当奇怪的 . 我必须手动将背景设置为分组表视图的“组表视图背景颜色”,并为非分组表视图设置“白色颜色” . 然后它显示为“默认”(我假设它然后匹配硬编码值) . - 实际上,甚至更容易,从“Grouped”更改为“Static”,然后返回似乎重置默认颜色 .
我昨天遇到同样问题的时候跟着这个帖子 . 我遵循的步骤
对于Xcode 5.1,我不得不对iPhone故事板进行一些清理,比如缺少表格单元的reuseIdentifiers,为每个控制器提供故事板ID,删除未使用的场景 .
将MainStoryboard_iPhone.storyboard复制到MainStoryboard_iPad.storyboard .
使用vi编辑器 - 将
targetRuntime="iOS.CocoaTouch"
更改为targetRuntime="iOS.CocoaTouch.iPad"
将 MainStoryboard_iPad.storyboard 中的代码从:
<simulatedScreenMetrics key="destination" type="retina4"/>
更改为<simulatedScreenMetrics key="destination"/>
在Xcode中打开项目 .
将部署设备更改为通用 - 选择不复制iPhone故事板的选项 .
Xcode将默认部署目标设为7.1,负责已弃用的功能 .
修复iPad故事板中错误放置的视图错误 - 更改了控制器的框架布局,给出了错误 .
就是这样..感谢大家的帮助..
我发现了一种解决方案:
复制您的iPhone-Storyboard并重命名
MainStoryboard_iPad.storyboard
关闭Xcode然后打开该文件任何文本编辑器 .
搜索
targetRuntime="iOS.CocoaTouch"
并将其更改为targetRuntime="iOS.CocoaTouch.iPad"
更改MainStoryboard_iPad.storyboard中的代码:
<simulatedScreenMetrics key="destination" type="retina4"/>
来<simulatedScreenMetrics key="destination"/>
这节省了我的时间 - 希望这对你有所帮助
此功能现在已内置 . 例如,如果将部署信息 - >设备中的项目设置从iPhone更改为通用,则会显示以下对话框:
对于支持大小类的Xcode版本,有一个非常简单的解决方案(在Xcode 7中测试,这是编写本文时的当前版本) . Check 故事板文件(文件检查器)上的 "use size classes" 复选框,确认出现的对话框 . Then uncheck 同样的复选框 - Xcode将询问您是否要将此故事板与iPhone或iPad一起使用,并适当地转换其中的屏幕 . No need to directly edit the storyboard file . 对于iPad和iPhone,只需复制相同的故事板,并使用所述方法为iPad配置一个,为iPhone配置一个 .
在有人建议使用大小类之前 - 虽然很好,但它们对于大量定制的UI(例如游戏等)来说不太方便
正如对那些可能遇到我的问题的人的快速记录:
我的问题:
故事板内容很好地复制到我添加的新板文件中 . 但是,它不会对我配置的iPad进行更改 . 注意到我必须切换构建目标的指定故事板(参见图像),让更改显示 .
如果我有分数,我会发布图像,但设置位于:
左侧源菜单上的项目导航器,项目的根目标(中心窗格)常规选项卡,(第二个子 Headers )部署信息,选择了iPad按钮选项卡 .
从那里,选择“主界面”下的故事板 .
谢谢你的帖子,我希望这个提到有助于在某个地方找到障碍 .
如果您已经创建了一个通用项目,默认情况下会创建空的iPad故事板,您只需选择iPhone故事板选择全部(命令A),复制(命令C)并将其粘贴到iPad故事板上 . 确保在编译之前将入口点从空故事板移动到新复制的故事板 .
这些东西节省了我几个小时,可能会帮助那些有Python技能的人 .
我在过去的两个月里一直在构建一个应用程序,专注于iPad与团队一起迭代UX .
今天专注于构建iPhone版本,按照上面的步骤(谢谢!)但我不想在视觉故事板编辑器中调整iPad尺寸的所有ui元素 .
所以我写了这个小的python jig脚本来扫描storyboard文件中的x,y,width,height并按比例缩放320./768 . 那么请允许我专注于精细调整 .
将iPad故事板复制到新文件中 . (例如iPhoneStoryboard.storyboard)
运行下面的脚本,并将复制的故事板文件名作为第一个参数 .
将生成带后缀_adjusted.storyboard的输出文件(例如iPhoneStoryboard.storyboard_adjusted.storyboard)
希望能帮助到你...
一种不同的方法
在iPad-Storyboard中添加带有Navigation-Controller的空视图控制器
将Class更改为用于iPhone的第一个ViewController的类,“fooViewController”
为第一个ViewController在iPhone-Storyboard“fooViewController_storyboard_identifier”中添加Storyboard-Identifier
转到“fooViewController.m”
添加bool变量bool
nibWasLoadForIpad=false
转到
viewDidLoad
-Method(ps . 知道问题是视图背景将设置为白色)