我有一个iPhone应用程序,它有一个故事板。现在我还想提供一个iPad应用程序。我问自己是否有一个函数可以帮助我将iPhone的故事板转换成iPad的故事板。
具体来说:
是否有类似的功能,还是只有手动的方式?
我有一个iPhone应用程序,它有一个故事板。现在我还想提供一个iPad应用程序。我问自己是否有一个函数可以帮助我将iPhone的故事板转换成iPad的故事板。
具体来说:
是否有类似的功能,还是只有手动的方式?
我找到了一种解决方案:
Duplicate your iPhone-Storyboard and rename it MainStoryboard_iPad.storyboard Close Xcode and then open this file any text editor. Search for targetRuntime="iOS.CocoaTouch"and change it to targetRuntime="iOS.CocoaTouch.iPad" Change the code in the MainStoryboard_iPad.storyboard from: <simulatedScreenMetrics key="destination" type="retina4"/> to <simulatedScreenMetrics key="destination"/> Now save everything and reopen Xcode. The iPad-Storyboard has the same contents as the iPhone-file but everyting could be disarranged.
这节省了我很多时间,希望这对你们有帮助
这是另一种方式,但我能够做一个全选&复制在我的iPad故事板(~35个场景),并粘贴到我的iPhone故事板。场景大小自动调整。我只看到了两个问题,我必须替换UISplitViewController(因为它只是iPad),默认背景变成透明而不是灰色(仍在正确地修复这个问题,无需手动设置所有背景)。
编辑:在属性检查器中UITableView的默认背景似乎很奇怪。对于分组的表视图,我必须手动设置背景为“组表视图背景色”,对于非分组的表视图,我必须手动设置背景为“白色”。然后它被显示为“Default”(我假设它匹配了一个硬编码的值)。实际上,更简单的是,从“分组”切换到“静态”,然后再切换回来似乎会重置默认颜色。
如果你创建了一个通用项目,默认情况下会创建空的iPad storyboard,你只需要选择iPhone storyboard select all (Command+ a),复制(Command+C),然后粘贴到iPad storyboard上。在编译之前,请确保将入口点从空故事板移动到新复制的故事板。
这对我不太管用。我做了一些不同的事情。
为iPad版本创建一个新的故事板文件 在textwrangler(文本编辑器)中打开新文件和我想复制的文件 在这些xml标记之间将xml文本从旧文件复制到新文件 第一个标签<scenes> <!——内容视图控制器——> 粘贴在这里 结束标签</class> </classes> .结束标签
这对我很管用。我得到了一个新的布局,所有的插座都连接在一起,这为我节省了几个小时。
你应该在苹果公司创建一个错误报告。你可以说它是我的(10167030)的副本,它自2011年9月以来一直开放。从我的角度来看,令人沮丧的事情是Xcode 3中就有这个功能……
1. Create New Storyboard file with MainStoryboard_iPad.storyboard
2. Copy All the views from MainStoryboard and paste to MainStoryboard_iPad.storyboard
最简单和最可靠的方法是从你的iPad故事板复制粘贴。
创建一个新的故事板,并将其命名为MainStoryboard_ipad。 通过在你的项目的目标属性的Summary页上将Devices属性设置为Universal,使你的应用程序成为Universal应用程序。 打开你的iPhone故事板,选择全部并复制 打开你的iPad故事板并粘贴。
你将不得不调整大小,但这可能比重新创建整个故事板更快。
对于那些可能对我的观点有异议的人,我想简短地提醒一下:
我的问题:
故事板内容很好地复制到我添加的新板文件中。但是,它不会将更改转移到我配备的iPad上。注意到我必须为构建目标切换指定的故事板(见图),让更改显示出来。
如果我有点,我会张贴一个图像,但设置位于:
左侧源菜单上的项目导航器,项目的根目标(中心窗格)一般选项卡,(第二子标题)部署信息,选择iPad按钮选项卡。
从那里,在“主界面”下选择你的故事板。
谢谢你的帖子,我希望这能帮助你解决问题。
1 -创建“MainStoryboard_iPad.storyboard”;
2 -右键单击“MainStoryboard_iPhone.”故事板”和“打开作为->源代码”。所有复印件;
3-右键单击“MainStoryboard_iPad”。故事板”和“打开作为->源代码”。粘贴了一切。现在搜索和改变:
targetRuntime = " iOS。CocoaTouch" to targetRuntime="iOS.CocoaTouch.iPad" type = " com.apple.InterfaceBuilder3.CocoaTouch.Storyboard。" to type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.iPad.XIB"
4 -保存。现在重新打开,但是使用接口构建器。你只需要重新安排。
此方法也可用于.xib文件
通过阅读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 " open as " ->"IOS storyboard " 5. 您可能还必须更改您的约束条件。 这就是你所做的一切。
谢谢大家的回答。
我遵循了上述步骤,但当我在模拟器或iPad下运行应用程序时,它只使用iPhone故事板继续运行。
由于某种原因,当我将目标设备改为Universal而不是iPhone时,Xcode (v5.0)没有更新app-Info。plist文件来包含iPad故事板,所以我必须手动添加以下条目(使用Xcode中的plist编辑器):
主故事板文件基名(iPad) ==> MainStoryboard_iPad
这里有一些为我节省了时间的东西,可能会对那些掌握Python技能的人有所帮助。
在过去的两个月里,我一直在开发一款应用,专注于与团队一起在iPad上迭代用户体验。
今天的重点是构建iPhone版本,遵循上面的步骤(谢谢!),但我不想在视觉故事板编辑器中从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()
不同的方法
在iPad-Storyboard中添加一个带有Navigation-Controller的empty-View-Controller 将类更改为你的第一个用于iPhone的ViewController的类"fooViewController" 为第一个ViewController添加iPhone-Storyboard "fooViewController_storyboard_identifier"中的Storyboard-Identifier 转到fooviewcontroller。m 添加bool变量bool 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"]; (自我。导航控制器pushViewController:控制器动画:YES]; 自我。modalPresentationStyle = UIModalPresentationCurrentContext; }
(ps.知道的问题是视图背景将被设置为白色)
只是为了好玩,在XCode 5.1和iOS 7.1上,我还需要改变“toolVersion”和“systemVersion”的值:
toolsVersion="5023" systemVersion="13A603"
如果没有这个,新的故事板文件将无法编译
当我昨天遇到同样的问题时,我关注了这个帖子。我遵循的步骤
For Xcode 5.1, I had to do some cleanup of iPhone storyboard like missing reuseIdentifiers of Table cells, provide story board id for every controller, remove unused scenes. Copy MainStoryboard_iPhone.storyboard to MainStoryboard_iPad.storyboard. Using vi editor - changed targetRuntime="iOS.CocoaTouch" to targetRuntime="iOS.CocoaTouch.iPad" Change the code in the MainStoryboard_iPad.storyboard from: <simulatedScreenMetrics key="destination" type="retina4"/> to <simulatedScreenMetrics key="destination"/> Open the project in Xcode. Changed the Deployment devices to Universal - Chose the option of NOT copying the iPhone Storyboard. Xcode will default the Deployment Target to 7.1, took care of the deprecated functions. To fix the misplaced view error in iPad Storyboard - Changed the Frame Layout for Controllers giving errors.
就是这样。谢谢你的帮助。
使用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设备上工作。
There is a really simple solution for Xcode versions that support size classes (Tested in Xcode 7 which is the current version at the time of writing). Check the "use size classes" checkbox on a storyboard file (File Inspector), confirm that dialog that appears. Then uncheck that same checkbox - Xcode will ask you if you want to use this storyboard with an iPhone or iPad, and convert the screens in it appropriately. No need to directly edit the storyboard file. For both iPad and iPhone, just copy the same storyboard and configure one for iPad and one for iPhone using the described method.
在有人建议使用大小类之前——虽然很好,但对于重度定制的UI,比如游戏等,它们不太方便
我只是改变了(另外从@tharkay的答案):
<device id="ipad9_7" orientation="landscape">
效果很好!
我在XCode 8.3.3中使用了这个
对于 Xcode10
复制Main.storyboard 然后将文件重新命名为Main_iPad。storyboard和main_iphone。storyboard 在.plist中设置适当的名称
4.只需选择适当的.storyboard进行配置