将情节提要从iPhone转换为iPad


218

我有一个iPhone带有情节提要的应用程序。现在,我也想提供一个iPad应用程序。所以我问我是否有一个功能可以帮助我将iPhone情节提要转换为iPad情节提要。

再具体一点:

有类似的功能还是只有手动方式?


5
哦,谢谢,我不知道我要标记它们,我现在将一个答案标记为正确的答案。我也在旧线程中做到了,谢谢。
dehlen

1
有关步骤和图像的详细信息,请参见datacalculation.blogspot.in/2014/09/…–
iOS测试

Answers:


535

我发现了一种解决方案:

  1. 复制您的iPhone-Storyboard并将其重命名 MainStoryboard_iPad.storyboard

  2. 关闭Xcode,然后使用任何文本编辑器打开此文件。

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

  4. 从以下位置更改MainStoryboard_iPad.storyboard中的代码:

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

    <simulatedScreenMetrics key="destination"/>

  5. 现在保存所有内容并重新打开Xcode。iPad-Storyboard的内容与iPhone文件相同,但所有内容都可能乱七八糟。

这为我节省了时间-希望这会对您有所帮助


20
+1如果可以的话,我会凭自己的声誉给您+100。绝妙的建议!我唯一不能做的就是用Dashcode打开情节提要,所以我使用了TextWrangler(但是我认为任何文本编辑器都可以)。谢谢!
Piotr Justyna 2012年

45
好的建议,谢谢。在使用它时,您可能还想直接从此处将所有width =“ 320”更改为width =“ 768”,将height =“ 480”更改为height =“ 1024”,等等。因为它比在IB中逐个元素简单得多。
Ben

63
不要在xCode内简单地使用Dashcode或textWrangler:完成后右键单击情节提要上的->“打开方式”->“源代码”,除使用“ Interface Builder-IOS StoryBoard”外,执行相同的操作
hokkuk

16
@PiotrJustyna,您可以这样做。按start a bounty问题下,选择所需的金额和Reward existing answer...
菲利普Radelic

33
要获得iPad格式,还可以将MainStoryboard_iPad.storyboard中的代码从:<simulatedScreenMetrics key="destination" type="retina4"/>更改为<simulatedScreenMetrics key="destination"/>
Marcus Schwab

61

如果您创建了一个通用项目,则默认情况下将创建空的iPad故事板,只需选择iPhone故事板,然后全选(Command + A),复制(Command + C)并将其粘贴到iPad故事板上。编译之前,请确保将入口点从空的故事板移至新复制的故事板。


9
最佳答案,简单的解决方案,并且让您可以轻松地修改界面,而不是顶级答案。:)
马特·里德

那布局呢?
tryKuldeepTanwar '16

10

那对我来说不是很有效。我做了一些不同的事情。

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

那对我有用。我连接了所有插座,得到了一个新的布局,仅此一项就节省了我几个小时。


1
+1其他人没有为我工作,这使所有工作都按预期进行
Shereef Marzouk

4
您可以在Xcode中执行此操作。只需右键/控制,单击.storyboard文件,然后单击Open As > Source Code以查看原始XML。
Matt Kantor 2013年

8

通过阅读许多关于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.您可能还需要更改约束。那就是您所做的全部。



8

1-建立您的 "MainStoryboard_iPad.storyboard";

2-右键单击您"MainStoryboard_iPhone.storyboard",然后单击“打开为->源代码”。复制所有内容;

3-右键单击您"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文件


1
这是最好的方法。因为所有视图和组件都将调整为ipad格式。
2013年

1
在最新版本的ios7中,无需更改type =“ com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB”。
super9 2014年

5

这是另一回事,但是我可以选择全部并复制到我的iPad情节提要中(〜35个场景)并将其粘贴到我的iPhone情节提要中。场景大小已自动调整。我只看到两个问题,我不得不替换UISplitViewController(因为它只有iPad),并且默认背景变为透明而不是灰色(仍然可以正确地进行修复,而无需手动设置所有背景)。

编辑:似乎在属性检查器中的UITableView的默认背景是相当奇怪。对于分组的表格视图,我必须手动将背景设置为“分组表格视图背景色”,对于非分组的表格视图,则必须手动设置为“白色”。然后将其显示为“默认”(我认为是因为它随后与硬编码值匹配)。-实际上,甚至更容易,从“分组”更改为“静态”,然后再返回似乎可以重置默认颜色。


4

这为我节省了时间,并且可能会帮助您那些拥有Python技能的人。

在过去的两个月中,我一直在开发一个应用程序,专注于与团队一起迭代UX的iPad。

今天,我们专注于构建iPhone版本,遵循上述步骤(谢谢!),但是我不想在可视情节提要编辑器中调整iPad尺寸中的所有ui元素的大小。

因此,我编写了这个小python跳汰脚本来扫描情节提要文件中的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()

1
嗨,Chrish,我是phython的新手。因此我无法理解将iphone故事板更改为iPad的代码。所以你能帮我这个忙吗?我的iPad情节提要板可以毫无问题地转换为iPhone情节提要板。但我需要将iphone故事板转换为iPad。因此,在上述脚本中需要更改的地方,或者您可以共享将iphone转换为ipad的脚本。提前致谢。
Shubham 2014年

@Chris Robertson Chris,如果我想将此脚本用于iPhone到iPad的转换,我是否可以更改“比例= 320./768”。到“比例= 768./320”?
查尔斯·罗伯逊

3

转到“目标摘要”,然后将设备更改为通用设备,然后向下并将ipad版本设置为您喜欢的任何情节提要,包括根据需要复制并重命名的情节提要。


3

就像给那些可能遇到我这个问题的人提供一个简短的提示:

我的问题:

故事板的内容很好地复制到了我添加的新板文件中。但是,这不会对我配置的iPad进行更改。注意到我必须为构建目标切换指定的情节提要(参见图片),使更改得以显示。

如果有积分,我会发布图像,但是设置位于:

左侧源菜单上的项目导航器,项目的根目标(中心窗格)常规选项卡,(第二子标题)部署信息,并选择了iPad按钮选项卡。

从那里,在“主界面”下选择您的情节提要。

感谢您的帖子,我希望此提要对您有所帮助。


3

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

toolsVersion="5023" systemVersion="13A603"

没有这个,新的故事板文件将无法编译


3

使用XCode6大小类,您不再需要将情节提要转换为iPad。同一故事板可用于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设备上运行。


3

对于Xcode10

  1. 只是重复 Main.storyboard

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

  3. 在中设置适当的名称 .plist

在此处输入图片说明

4,选择合适的.storyboard进行配置 在此处输入图片说明


2

现在已内置此功能。例如,如果将“部署信息->设备”中的项目设置从iPhone更改为“通用”,则会显示以下对话框:

在此处输入图片说明


3
这可能是Xcode中的错误,但是我从来没有做过这项工作。最终的iPad故事板不会添加到项目中,并且看起来好像不是在创建的。
s73v3r 2014年

2

昨天遇到相同问题时,我遵循了这个主题。我遵循的步骤

  1. 对于Xcode 5.1,我必须对iPhone故事板进行一些清理,例如缺少复用表单元的标识符,为每个控制器提供故事板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"/><simulatedScreenMetrics key="destination"/>
  5. 在Xcode中打开项目。
  6. 将部署设备更改为通用-选择不复制iPhone故事板的选项。
  7. Xcode会将部署目标默认为7.1,并保留了已弃用的功能。
  8. 要修复iPad Storyboard中放错位置的视图错误-更改了出现错误的控制器的框架布局。

就是这样..谢谢大家的帮助..


1

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

  1. 创建一个新的故事板,并将其命名为MainStoryboard_ipad。
  2. 通过将项目的“目标”属性的“摘要”页面上的“设备”属性设置为“通用”,使您的应用成为通用应用。 在此处输入图片说明
  3. 打开您的iPhone故事板,然后全选并复制
  4. 打开您的iPad故事板并粘贴。

您必须调整大小,但是比重新创建整个情节提要更快。


1

对于支持大小类的Xcode版本,有一个非常简单的解决方案(在编写本文时,当前版本已在Xcode 7中进行了测试)。选中情节提要文件(File Inspector)上的“使用大小分类”复选框,确认出现该对话框。然后取消选中相同的复选框-Xcode会询问您是否要在iPhone或iPad上使用此情节提要,并适当地转换其中的屏幕。无需直接编辑情节提要文件。对于iPad和iPhone,只需复制相同的故事板,然后使用上述方法为iPad配置一个,为iPhone配置一个。

并且在有人建议使用大小类之前-虽然很棒,但是它们对于大量定制的UI(例如游戏等)不太方便


1

不同的方法

  1. 在iPad故事板中添加带有导航控制器的空视图控制器

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

  3. 在iPhone故事板“ fooViewController_storyboard_identifier”中为第一个ViewController添加Storyboard-Identifier。

  4. 转到“ fooViewController.m”

  5. 添加布尔变量布尔 nibWasLoadForIpad=false

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



0

谢谢大家的回答。

我按照上述步骤操作,但是当我在模拟器或iPad上运行该应用程序时,仅使用iPhone故事板就可以继续使用。

由于某种原因,当我将目标设备更改为通用设备而不是iPhone时,Xcode(v5.0)并未更新app-Info.plist文件以包括iPad故事板,因此我不得不手动添加以下条目(在Xcode中使用plist编辑器):

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


0

我只是更改(除了@tharkay的答案):

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

而且效果很好!

我在XCode 8.3.3中使用它

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.