您可以添加两个笔尖(一个用于 ipad,一个用于 iphone),或者您可以添加一个可以为任一接口正确缩放的笔尖。通常,如果您制作的视图将覆盖整个或大部分屏幕,您会添加两个笔尖,如果您正在制作一些可能会在 iphone 上全屏但显示在ipad 上的弹出窗口。
波浪号后缀在Resource Programming Guide中的“iOS 支持设备特定资源”标题下进行了~ipad
描述。请注意,后缀完全是小写,而不是您在问题中所写的驼峰式。这很重要,因为 iOS 使用区分大小写的文件系统。~iphone
当您使用or之NSBundle
类的消息获取资源的路径时,iOS 将首先查找后缀为or的资源文件,具体取决于当前设备。例如,假设您这样做:-[NSBundle pathForResource:ofType:]
-[NSBundle URLForResource:withExtension:]
~ipad
~iphone
NSString *path = [[NSBundle mainBundle] pathForResource:@"setup" ofType:@"plist"];
如果您在 iPhone 类型的设备(包括 iPod touch)或 iPhone 模式下的模拟器上运行它,iOS 将首先在您的应用程序包中查找名为setup~iphone.plist
. 如果找到这样的文件,它将返回该文件的路径。如果它没有找到该文件,它将改为返回setup.plist
.
如果您在 iPad 类型的设备上或在 iPad 模式下的模拟器上执行此操作,iOS 将首先在您的应用程序包中查找名为setup~ipad.plist
. 如果找到这样的文件,它将返回该文件的路径。如果它没有找到该文件,它将改为返回setup.plist
.
从包中获取资源的所有其他 API 都构建在NSBundle
. 这意味着如果您使用+[UIImage imageNamed:]
,它将自动使用特定于设备的图像,如果您的捆绑包中有一个。如果你使用-[NSBundle loadNibNamed:owner:options:]
,它会自动加载一个特定于设备的 nib ( .xib
) 文件,如果你的包中有一个。
如果您使用后缀,这会简化您的代码。如果您创建MyViewController~ipad.xib
and MyViewController~iphone.xib
,您的应用将自动为当前设备加载正确的。您不必检查用户界面习语;NSBundle
为您检查。(您也可以使用名称MyViewController~ipad.xib
andMyViewController.xib
并获得相同的效果。)
现在,您可能已经注意到,当您创建“通用”项目时,Xcode 将您的项目文件命名为ViewController1_iPhone.xib
and ViewController1_iPad.xib
,它不使用波浪线后缀,并且它包含查看用户界面习语并相应地选择文件名的代码。为什么通用项目模板会这样做?我不知道,但这很愚蠢。我建议您修复文件名以使用波浪号后缀并删除检查用户界面习语的代码。