现有的ios项目与iPhone 5兼容

时间:2012-10-05 14:01:48

标签: iphone objective-c xcode ios6

  

可能重复:
  How to detect iPhone 5 (widescreen devices)?

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

我尝试使用“使用自动布局”,但它无效。

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

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

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

4 个答案:

答案 0 :(得分:4)

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

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

    • 查看应全屏的控制器
  3. enter image description here

    • 与顶部有固定距离的元素

    enter image description here

    • 与底部固定距离的元素

    enter image description here

    • 与顶部/底部动态距离的元素,应根据容器的大小进行缩放

    enter image description here

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

    最佳, 本杰明

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分: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文件)