2

我之前在为通用应用程序创建 XIB 文件时遵循的常见做法如下:

我为 iPhone 和 iPad 创建了 Xib 文件。将它们命名为 XibFile.xib 和 XibFile~ipad.xib。对于 iPhone 4/4s 和 iPad3,我在需要时使用了视网膜图像。所以这涵盖了我所有的 UI 设计。我的客户还需要信箱模式的 iPhone5 屏幕。我没有使用 Default-568h@2x.png。所以我的生活很顺利。但是现在,当 Apple 决定从 5 月 1 日起停止支持 Letterbox 模式(阅读本文)时,我也需要为 iphone5 屏幕更改 Xib 级别。所以现在我在 Xib 文件中使用了自动调整大小,并为我的所有屏幕使用了垂直扩展,这解决了我的大部分问题。现在请告诉我创建 XIB 文件的最佳实践,为 iphone5/4/4s 和 iPad 提供支持。

1.) 为 iphone5、4" 屏幕设计并为 iPhone 4/4s 使用自动调整大小。这不会影响我使用的图像的清晰度。

2.) 为 iphone 创建 2 个不同的 Xib 文件。一个用于 4" iPhone5,另一个用于普通 iPhone4/4s 屏幕。

请建议哪个是最佳做法。如果有其他方法,也请告诉我。

4

4 回答 4

1

如果不同设备的布局根本不同,您只需要创建多个 XIB。

如果您可以通过适当的自动调整大小行为为 iPhone 4 和 5 重复使用相同的 XIB,请这样做。

于 2013-05-15T06:51:22.580 回答
0

使用自动调整大小是一个很好的解决方案,它使您的界面定义和代码保持简单和最小化。4 和 5 XIB 文件之间可能几乎没有区别。

使用此方法可能会出现问题的区域是您在 XIB 中定义了滚动视图,其中内容大小仅在 XIB 中指定。在这种情况下,您需要添加一些代码来计算内容大小并可能调整内容的大小,因为自动调整大小不会覆盖它。

于 2013-05-15T06:28:15.437 回答
0

取不同的xib,把这个编码你可以轻松管理。

        //Device Compatibility
        #define g_IS_IPHONE             ( [[[UIDevice currentDevice] model] isEqualToString:@"iPhone"] )
        #define g_IS_IPOD               ( [[[UIDevice currentDevice] model] isEqualToString:@"iPod touch"] )
        #define g_IS_IPAD               ( [[[UIDevice currentDevice] model] isEqualToString:@"iPad"] )
        #define g_IS_IPHONE_5_SCREEN    [[UIScreen mainScreen] bounds].size.height >= 568.0f && [[UIScreen mainScreen] bounds].size.height < 1024.0f
        #define g_IS_IPHONE_4_SCREEN    [[UIScreen mainScreen] bounds].size.height >= 480.0f && [[UIScreen mainScreen] bounds].size.height < 568.0f 



     if(g_IS_IPHONE_5_SCREEN)
     {
              DashboardViewController* deshObj=[[DashboardViewController alloc] initWithNibName:@"DashboardViewController" bundle:nil];
     }
     else if(g_IS_IPHONE_4_SCREEN)
     {
            DashboardViewController* deshObj=[[DashboardViewController alloc] initWithNibName:@"DashboardViewController4" bundle:nil];
     }
     else if(g_IS_IPAD){
             DashboardViewController* deshObj=[[DashboardViewController alloc] initWithNibName:@"DashboardViewControllerIpad" bundle:nil];
     }
     else{
           DashboardViewController* deshObj=[[DashboardViewController alloc] initWithNibName:@"DashboardViewController" bundle:nil];
      }

你可以很容易地把你的条件

于 2013-05-15T06:48:41.140 回答
0

最好的方法是检查不同型号的 iphone 或 ipad 并相应地做必要的事情。您可以使用以下代码检查 iphone 版本。

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
    if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)]) {
        CGSize result = [[UIScreen mainScreen] bounds].size;
        CGFloat scale = [UIScreen mainScreen].scale;
        result = CGSizeMake(result.width * scale, result.height * scale);

        if(result.height == 960) {
            NSLog(@"iPhone 4 Resolution");
            resolution_number = 1;
        }
        if(result.height == 1136) {
            NSLog(@"iPhone 5 Resolution");
        }
    }
    else{
        NSLog(@"Standard Resolution");
    }
}
于 2013-05-15T06:21:56.913 回答