可能重复:
如何检测 iPhone 5(宽屏设备)?
我已经有一个在 iPhone 4 和 iPad 上正常运行的项目。现在我想让该项目与 iPhone 5(4 英寸)兼容。
我试过使用“使用自动布局”,但它不起作用。
我的 Xcode 版本是 4.5 版 (4G182)。
我在互联网上搜索过,但找不到任何线索。
如果有人已经解决了这个问题,请指导我。
可能重复:
如何检测 iPhone 5(宽屏设备)?
我已经有一个在 iPhone 4 和 iPad 上正常运行的项目。现在我想让该项目与 iPhone 5(4 英寸)兼容。
我试过使用“使用自动布局”,但它不起作用。
我的 Xcode 版本是 4.5 版 (4G182)。
我在互联网上搜索过,但找不到任何线索。
如果有人已经解决了这个问题,请指导我。
在名为 Default-568h@2x.png 的项目中放置一个 iPhone 5 的默认图像。之后,iPhone 5 模拟器全屏启动了我的应用程序。
根据您的布局,您可能不需要自动布局。我可以使用 IB 中的自动调整大小设置来解决所有布局问题。最后很简单。我有四种问题:
我在现有项目中更喜欢这种方式。在下一个项目中,我将检查自动布局功能。
最好的,本杰明
我不建议创建单独的 xib 文件,这就是我所做的: 1. 添加 4 英寸启动屏幕 - 如果您想使用所有 iPhone 5 屏幕,这是必须的,没有其他设置。2. 如果您使用的是 xib 文件,只需使用界面生成器打开它并选择每个视图按钮等,并将其设置为动态放置(使用标尺选项卡)。注意设置窗口也要向上伸展。3. 如果您对视图进行编码,请检查您是否动态设置了位置和大小。
请注意,“自动布局”不向后兼容,因此它不会在 iOS6 之前的 iOS 版本上运行(它只是崩溃)!如果您从头开始,但对于不太好的旧应用程序,这可能很有用。
您是否尝试将名为 Default-568h@2x.png 的新启动图像添加到您的项目中?
一种可能的解决方案(可能不是最好的解决方案)是根据屏幕大小加载不同的 .xib 文件。这样您仍然可以保存与以前的 iOS 版本 (<6.0) 的兼容性。您可以添加一个选择正确 .xib 文件的类别,而不是initWithNibName:
@implementation UIViewController (iPhone5Support)
-(id) initAutomaticallyWithNibName:(NSString *)nibNameOrNil orIOS6NibName:(NSString*) IOS6NibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
BOOL isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136));
if (isiPhone5==NO) {
self = [self initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
} else {
self = [self initWithNibName:IOS6NibNameOrNil bundle:nibBundleOrNil];
if (self==nil) { NSLog(@" initAutomaticallyWithNibName ERROR - nil for io6 nib name"); }
}
return self;
}
@end
像这样使用它:
UIViewController *controller = [[UIViewController alloc] initAutomaticallyWithNibName:@"UIViewControllerXibName" orIOS6NibName:@"UIViewControllerXibName_4inch" bundle:nil];
(不要忘记为同一个控制器创建 2 个 xib 文件)