1

可能重复:
如何检测 iPhone 5(宽屏设备)?

我已经有一个在 iPhone 4 和 iPad 上正常运行的项目。现在我想让该项目与 iPhone 5(4 英寸)兼容。

我试过使用“使用自动布局”,但它不起作用。

我的 Xcode 版本是 4.5 版 (4G182)。

我在互联网上搜索过,但找不到任何线索。

如果有人已经解决了这个问题,请指导我。

4

4 回答 4

4
  1. 在名为 Default-568h@2x.png 的项目中放置一个 iPhone 5 的默认图像。之后,iPhone 5 模拟器全屏启动了我的应用程序。

  2. 根据您的布局,您可能不需要自动布局。我可以使用 IB 中的自动调整大小设置来解决所有布局问题。最后很简单。我有四种问题:

    • 查看应该全屏的控制器

在此处输入图像描述

  • 到顶部固定距离的元素

在此处输入图像描述

  • 到底部固定距离的元素

在此处输入图像描述

  • 到顶部/底部的动态距离应随容器大小缩放的元素

在此处输入图像描述

我在现有项目中更喜欢这种方式。在下一个项目中,我将检查自动布局功能。

最好的,本杰明

于 2012-10-05T14:14:50.353 回答
3

我不建议创建单独的 xib 文件,这就是我所做的: 1. 添加 4 英寸启动屏幕 - 如果您想使用所有 iPhone 5 屏幕,这是必须的,没有其他设置。2. 如果您使用的是 xib 文件,只需使用界面生成器打开它并选择每个视图按钮等,并将其设置为动态放置(使用标尺选项卡)。注意设置窗口也要向上伸展。3. 如果您对视图进行编码,请检查您是否动态设置了位置和大小。

请注意,“自动布局”不向后兼容,因此它不会在 iOS6 之前的 iOS 版本上运行(它只是崩溃)!如果您从头开始,但对于不太好的旧应用程序,这可能很有用。

于 2012-10-05T14:54:18.053 回答
1

您是否尝试将名为 Default-568h@2x.png 的新启动图像添加到您的项目中?

于 2012-10-05T14:04:46.737 回答
1

一种可能的解决方案(可能不是最好的解决方案)是根据屏幕大小加载不同的 .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 文件)

于 2012-10-05T14:39:21.273 回答