8

我的应用程序为 iPhone 5 提供了额外的功能,我为它创建了一个带有 .xib 的单独类。我想检测屏幕高度(除非可以获取设备 ID/型号)并相应地加载不同的视图控制器。我试过这个:

- (IBAction)select:(id)sender {

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;

if (screenHeight == 960) {

Selection *selectView =[[Selection alloc] initWithNibName:nil bundle:nil];
selectView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:selectView animated:YES];

}

else {

    Selection_5 *selectView =[[Selection_5 alloc] initWithNibName:nil bundle:nil];
    selectView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:selectView animated:YES];

}

}

Selection 和 Selection_5 是两个不同的类,每个类都有不同的用户界面 xib。

4

4 回答 4

8

首先,您不想按设备类型进行检查。新的 iPod touch(具有相同尺寸的屏幕)或明年的 iPhone 会发生什么。

但我认为这里的问题是您正在根据实际的像素数检查屏幕尺寸 - 奇怪的是 - 这不是您想要的。请记住,在 Retina 屏幕上,一切都是“加倍”的。在 UI 中,您(大多数情况下)对所有内容使用“正常”大小,在这种情况下,是像素数的一半。

简而言之:检查屏幕高度是否为 480(正常)或 568(iPhone 5)。

于 2012-10-02T10:30:37.817 回答
5

试试http://github.com/erica/uidevice-extension/

[[UIDevice currentDevice] platformType]   // ex: UIDevice4GiPhone
[[UIDevice currentDevice] platformString] // ex: @"iPhone 4G"

或者你可以只看 screenHeight 像:

float screenHeight = [UIScreen mainScreen].bounds.size.height;

iPhone 5 的高度是 568

如果您使用 .xib 加载,也许您会设置 nib:

[[Selection alloc] initWithNibName:@"here_is_nibname" bundle:nil];
于 2012-10-02T10:18:00.960 回答
5

在我的应用程序中,我必须为 iPhone、iPhone5/iPod Touch 和 iPad 加载一个 .XIB 文件,为此,这是我使用的代码:

// If Iphone/iPod Touch
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
  // If iPhone 5 or new iPod Touch
  if([UIScreen mainScreen].bounds.size.height == 568){
     VCDadosViewController *extratoVC = [[VCDadosViewController alloc] initWithNibName:@"VCDadosViewControllerExt" bundle:nil];
     ...
  } else{
    // Regular iPhone
    VCDadosViewController *extratoVC = [[VCDadosViewController alloc] initWithNibName:@"VCDadosViewController" bundle:nil];
     ...          
  }
// If iPad
} else {
  VCDadosViewController *extratoVC = [[VCDadosViewController alloc] initWithNibName:@"VCDadosViewControllerPad" bundle:nil];
  ...
}

希望它可以帮助需要的人:)

于 2012-11-03T03:42:11.040 回答
3

如果你有这个命名约定

VGArticlePage~ipad.xib
VGArticlePage~iphone.xib
VGArticlePage~iphone_ext.xib

然后你可以这样做

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0f)

- (NSString *)nibNameForClass:(Class)class
{
    if(IS_IPHONE && IS_IPHONE_5)
    {
        return [NSString stringWithFormat:@"%@%@", NSStringFromClass(class), @"~iphone_ext"];
    }
    else if(IS_IPHONE)
    {
        return [NSString stringWithFormat:@"%@%@", NSStringFromClass(class), @"~iphone"];
    }
    else
    {
        return [NSString stringWithFormat:@"%@%@", NSStringFromClass(class), @"~ipad"];
    }
}
于 2013-01-18T10:34:08.773 回答