将iPhone xib转换为iPad xib?


75

你怎么做呢?我在上面看到了一个视频教程,但是屏幕太小。另外,除了更改视图大小之外,我还需要对iphone应用程序进行其他一些重大更改才能转换为iPad吗?

Answers:


29

假设您拥有带有Xcode 3的SDK ,

  1. 打开IB。
  2. 打开XIB。
  3. 文件->使用自动调整大小的蒙版创建iPad版本。

会有什么不同?
pestilence669 2010年

7
呃...除了没有Interface Builder了,而且在XCode 4中没有我可以找到的等效选项。
Nicholas MT Elliott

我一直在寻找Xcode 4中的解决方案,到目前为止,我不得不从头开始将XIB重建为iPad,以解决它,这是不对的。
彼得·约翰逊

@Peter约翰逊,@radven,@Nicholas MT埃利奥特,把低于答案实际工作(虽然它不是漂亮)的XCode的4
丹Rosenstark

1
一件事可能会有所帮助-如果您关闭模拟界面元素,则可以自由调整视图的大小。
彼得·约翰逊

159

我能够将其范围缩小到几件事,因此以下是对我有用的步骤:

1)复制iPhone xib文件并将其添加到您的项目中

2)右键单击文件(在xcode中),然后单击“打开方式”>“源代码”

3)第二行应如下所示:

<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">

用。。。来代替:

<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="7.10">

4)搜索“ IBCocoaTouchFramework”,并将所有出现的内容替换为“ IBIPadFramework”

5)保存文件并打开为> Interface Builder-iOS

该文件看起来仍然像是普通的iPhone xib,但是对我而言,一旦我在属性检查器中将状态栏更改为“黑色”,其余的xib便会“捕捉”到iPad xib中


1
工作了。我的状态栏已经是黑色的。我将其设置为无,然后又变回黑色,然后它捕捉到了iPad视图
Thomas Thomas,

4
太棒了 对于Xcode 4的明确答案。所有支持的方式都已过时:)
克里斯·纽曼

1
我只想补充一点,这个答案在Xcode 4.2中有效。谢谢
jsherk

4
正如您可能期望的那样,对于首先创建iPad资源并想回到iPhone资源的情况,此方法也可以采用其他方法。
chrisbtoo 2012年

7
请注意,在最新的XCode5中,这仅更改了一点。与其在步骤4中寻找“ IBCocoaTouchFramework”,不如寻找“ iOS.CocoaTouch”并在末尾添加“ .iPad”。只有一个事件,并且与第一次编辑在同一行。还要注意的是,当您在IB中打开它时,只需将其交换为Portrait或Landscape(无论哪个都不行),然后再次返回即可,它将调整大小。
MajorHavoc 2013年

33

在Xcode 5中,您应该:

找:

<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="4510" systemVersion="12F37" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">

替换为:

<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="4510" systemVersion="12F37" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none">

请注意,我们只是将.iPad添加到typetargetRuntime属性。

打开后,只需选择一个新的大小即可调整。示例:iPad全屏。


1
小错别字:您应该搜索<...type="com.apple.InterfaceBuilder3.CocoaTouch.XIB"...>
朱利安D.13年

22

XCode4:

在xcode 4中,我们无法针对单个xib做到这一点,但是我们可以一次创建各自的ipad版本。

在将项目配置为ipad之前,如果仅针对iphone配置了该项目,请右键单击目标并单击重复项。

现在,选择“复制并过渡到ipad”。将创建一个新的目标和一组新的xib。它将减少一些工作。

希望能帮助到你。


这节省了我很多时间...这个是这个问题的正确答案:)
大师

不幸的是,这在Xcode 5.1中不起作用,它创建了新的iPad目标,但没有迁移xib。我什至尝试创建一个新项目,然后将情节提要板复制到Main.storyboard,然后将目标复制到iPad,但它仍然不会生成xib。由于某些原因,Xcode 3中的Interface Builder不再在10.9中打开,因此我被迫直接编辑xib文本。
扎克·莫里斯

PS:此答案对Xcode 5(可能也是4)最有效,因为它会在大多数情况下自动调整布局的大小:stackoverflow.com/a/8694985/539149
Zack Morris

14

Xcode 4

创建iPad版使用自动调整大小面具功能已在Xcode 4去除眼下最简单的方法是使用的Xcode 3的转换,因为笔尖(的.xib)文件格式并没有改变。

现在,只需选择其他文件夹即可将Xcode 3和4都安装在同一系统上(请参阅磁盘映像上的安装说明)。

否则,您需要从iPhone版本复制/粘贴UI元素,然后将它们重新链接到您的代码。


2
我希望我被允许对此版本Beta OS以及该版本Beta IDE之以

Xcode 4可以做到这一点。在同一页面上查看Tejesh的答案。
Marc M

6

让计算机完成计算机的工作怎么样?
更快,更少的错误风险。

这是一个基于Jag出色回答的工作流程,但使用sed进行了自动化。

首先,让我们设置一些东西。我们只需要这样做一次。
在包含您的XIB的目录中,创建两个具有以下内容的文件:

档案iPhoneToiPadXIBConversion.sed

s/com.apple.InterfaceBuilder3.CocoaTouch.XIB/com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB/g
s/IBCocoaTouchFramework/IBIPadFramework/g

和文件iPadToiPhoneXIBConversion.sed

s/com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB/com.apple.InterfaceBuilder3.CocoaTouch.XIB/g
s/IBIPadFramework/IBCocoaTouchFramework/g


安装完成。要转换XIB,请在终端中输入以下两个命令之一:

iPhone到iPad的转换:

sed -f iPhoneToiPadXIBConversion.sed  MyViewController~iphone.xib  > MyViewController.xib

iPad到iPhone的转换:

sed -f iPadToiPhoneXIBConversion.sed  MyViewController.xib  > MyViewController~iphone.xib





只是为了好玩,让我们在zsh中创建两个函数,以使转换更加简单:

function convertiPadXIBToiPhone () {
    newXibName=`echo "$1" | /usr/bin/sed "s/.xib/~iphone.xib/"`
    `/usr/bin/sed -f iPadToiPhoneXIBConversion.sed "$1" > "$newXibName"`
    echo "Did convert $1 to $newXibName."
}

function convertiPhoneXIBToiPad () {
    newXibName=`echo "$1" | /usr/bin/sed "s/~iphone.xib/.xib/"`
    `/usr/bin/sed -f iPhoneToiPadXIBConversion.sed "$1" > "$newXibName"`
    echo "Did convert $1 to $newXibName."
}

将其添加到您的zsh配置后,转换XIB很简单:

convertiPadXIBToiPhone MyViewController.xib

要么

convertiPhoneXIBToiPad MyViewController.xib

几乎与XCode 3内置此功能时一样好。:-)
Warren P

:)嗨,我很想让Xcode的下一版本的新功能使此黑客毫无用处。等待它,每次必须转换XIB时我都会使用它,效果很好!
Guillaume13年

5

使用“查看作为源代码”在XCode 4中打开XIB。

之前

备份有问题的笔尖。

代替这个粘

    <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
    <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
        <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
        <integer value="1056" key="NS.object.0"/>
    </object>
    <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
        <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
        <integer value="3100" key="NS.object.0"/>
    </object>
    <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
    <int key="IBDocument.defaultPropertyAccessControl">3</int>
    <string key="IBCocoaTouchPluginVersion">301</string>

为了这个

    <string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
    <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
        <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
        <integer value="3100" key="NS.object.0"/>
    </object>
    <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
    <int key="IBDocument.defaultPropertyAccessControl">3</int>
    <string key="IBCocoaTouchPluginVersion">301</string>

然后,对于使用集成IB的笔尖中的每个视图,将其删除然后单击“撤消”。

然后用热水淋浴以擦去您可能有的恶心感。


注意:代码直接取自1)损坏并且2)有效的NIB。
Dan Rosenstark 2011年

4

您可以将XIB作为文本文件打开并更改UIView大小:

在导航器中右键单击您的XIB文件,然后选择:“打开为...”作为源文件打开。

找到UIView参考并更改Frame值:

<object class="IBUIView" id="191373211">

<string key="NSFrame">{{0, 20}, {768, 1024}}</string>

嗯,我可以看到一个NSFrameSize,但那里看不到NSFrame ...有人可以确认吗?
彼得·约翰逊

在这里也是一样,我更改了NSFrameSize并具有效果,但是如果我想在Xcode中编辑UI,我仍然会看到小屏幕。
DixieFlatline 2011年

3

在XCode 4.3.2中,创建iPad版本的xib的最简单方法是复制该xib文件并~ipad在文件名中添加后缀。并将“ myVC.xib”和“ myVC〜ipad.xib”添加到您的项目中。请注意,它是“〜ipad”而不是“〜iPad”。在iPad上运行时,您的应用将自动使用该〜ipad版本。这也适用于资源文件(例如图像)。

我目前可以找到的最佳参考... https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/LoadingResources/ImageSoundResources/ImageSoundResources.html


我听说这(使用“〜iPad”自动选择文件)与较旧的iOS存在问题。
karim

是的,但这是具有新功能的典型事物。虽然找不到适合的文档。但是我很确定它可以在iOS 5及更高版本上使用,这应该足够好了。
Hlung

奇怪的是,Apple仍在其通用应用程序模板中使用[[UIDevice currentDevice] userInterfaceIdiom]。
Timur Kuchkarov 2013年

3

Xcode 5更新

targetRuntime =“ iOS.CocoaTouch”

targetRuntime =“ iOS.CocoaTouch.iPad”


2

我将记录在Xcode 4.5中所做的事情:

  1. fixpattern.sh

    cp REPLACEME_Iphone.h REPLACEME_Ipad.h
    sed -e 's/REPLACEME_Iphone/REPLACEME_Ipad/g' REPLACEME_Ipad.h > REPLACEME_Ipad_tmp.h
    mv REPLACEME_Ipad_tmp.h REPLACEME_Ipad.h
    cp REPLACEME_Iphone.m REPLACEME_Ipad.m
    sed -e 's/REPLACEME_Iphone/REPLACEME_Ipad/g' REPLACEME_Ipad.m > REPLACEME_Ipad_tmp.m
    mv REPLACEME_Ipad_tmp.m REPLACEME_Ipad.m
    cp REPLACEME_Iphone.xib REPLACEME_Ipad.xib
    sed -e 's/com.apple.InterfaceBuilder3.CocoaTouch.XIB   /com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB/g' REPLACEME_Ipad.xib > REPLACEME_Ipad_tmp.xib
    mv REPLACEME_Ipad_tmp.xib REPLACEME_Ipad.xib
    sed -e 's/IBCocoaTouchFramework/IBIPadFramework/g' REPLACEME_Ipad.xib > REPLACEME_Ipad_tmp.xib
    mv REPLACEME_Ipad_tmp.xib REPLACEME_Ipad.xib
    sed -e 's/320, 416/768, 1004/g' REPLACEME_Ipad.xib > REPLACEME_Ipad_tmp.xib
    mv REPLACEME_Ipad_tmp.xib REPLACEME_Ipad.xib
    sed -e 's/REPLACEME_Iphone/REPLACEME_Ipad/g' REPLACEME_Ipad.xib > REPLACEME_Ipad_tmp.xib
    mv REPLACEME_Ipad_tmp.xib REPLACEME_Ipad.xib
    
  2. 创建要转换的文件列表fixfile,每行将是一个没有扩展名的文件名。如果您的原始文件名是AAA_Iphone.h,只需输入AAA。如果原始文件不是这种模式,则需要修改脚本。

  3. 在命令行中运行

    cat fixfile | while read line ; do sed -e "s/REPLACEME/${line}/g" fixpattern.sh ; done > fixall.sh
    
  4. 审查并运行 fixall.sh

  5. 将新创建的文件添加到项目中


2

Jag的答案很好。但是,如果在Xcode 5中打开/创建XIB,则会遇到问题。

对于Xcode 5

1)复制iPhone xib文件并将其添加到您的项目中

2)右键单击文件(在xcode中),然后单击“打开方式”>“源代码”

3)第二行应如下所示:

<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="4510"

更改为

<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="4510"

4)第8行应如下所示:

<rect key="frame" x="0.0" y="0.0" width="320" height="480"/>

更改为

<rect key="frame" x="0.0" y="64" width="768" height="960"/>

就是这样,那里有iPad XIB。但是,真正的功劳仍归Jag。



1

对于Xcode 4,

您无需为每个设备创建单独的目标。相反,您可以将项目摘要中的设备更改为已经在iPhone中使用的Universal。在Xcode 4.2上将iOS 5应用更新为Universal的链接中对此进行了回答。因此,它将为您完成过渡。


0

听起来最好的解决方案是始终始终像iphone一样进行开发,然后在完成后添加ipad目标,让xcode进行更新。我犯了同样的错误,选择要启动的通用文件,它会创建前几个文件,但随后必须手动在ipad文件夹中重新创建所有其他xib。大痛苦


0
Jag has given Great Answer.

在某些情况下。

无需在Ipad XIB中转换您的Iphone XIB。您可以使用Autoresizingmask并获得运行Ipad。只需将您的APP配置为以适当的autoresizingmask在通用模式下运行。


0

只需更换

<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14854.2" targetRuntime="iOS.CocoaTouch"

<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="14854.2" targetRuntime="iOS.CocoaTouch.iPad"
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.