我正在开发一个应用程序,根据客户的要求,很少有视图仅与 iPhone 4 设备兼容,而其他视图与 iPhone 4,5 /iPad 兼容。那么单机可以吗?
我知道这是不可能的,但我想要你的建议。如果您有任何与此相关的链接,请与我分享。
是的,iPhone 3.5"、iPhone 4" 和 iPad 可以有不同的视图。此外,您可以在每个不同的设备中实现不同的功能。但是,iOS 用户界面指南建议您在不同设备上提供相同的功能。
保留应用程序的主要功能,无论它在什么设备上运行。尽管一个版本可能比另一个版本提供更深入或交互式的任务演示,但重要的是要避免让用户觉得他们在两个完全不同的应用程序之间进行选择。
在实践中,您可以使用以下宏以编程方式编写分叉来构建(以编程方式)视图:
#define isIpad() \
([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] && \
[[UIDevice currentDevice] userInterfaceIdiom]==UIUserInterfaceIdiomPad)
#define isWidescreen ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 )<DBL_EPSILON )
#define isIphone ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPhone" ] )
#define isIpod ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPod touch" ] )
#define isIphone5 ( isIphone && isWidescreen )
此外,您可以为每个不同的设备创建不同的 xib 文件,使用分叉和 UIViewController 消息:- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
加载正确的文件。
最后,您可以在 xib 文件名中使用修饰符来加载 iphone 和 ipad 之间的不同资源。例如:您的 iPad UI 有 FirstViewController.xib;如果设备是 iPhone(而不是 FirstViewController.xib),您可以创建一个将由 iOS 自动加载的 FirstViewController~iphone.xib。您可以查看此答案以获取有关此主题的更多信息。
编辑
如果您已经拥有“仅 iPhone 的 xib 文件”并且您想在 iPad 上运行这些文件,您应该考虑复制这些文件中的每一个,并将副本转换为 iPad 目标,正如这个或这个答案所解释的那样。然后,您可以重新命名以“~ipad.xib”结尾的副本,这应该可以解决您的问题,但是,此视图需要修改布局。
只需通过代码来决定。如果 iPhone 可以使用视图,请调用它,如果没有,就让它。区分 iPhone 和 iPad 只需使用
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
// iPad
else if([[UIScreen mainScreen] bounds].size.height == 568)
{
// iPhone retina 4 (iPhone 5)
}else
// Older iPhones