2

我正在设置我的 iphone 应用程序屏幕框架以支持 iphone 5,我已经设置了自动调整大小掩码面具 ,并且我尝试使用以下代码以编程方式设置框架loadview

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {
        CGSize result = [[UIScreen mainScreen] bounds].size;
        if(result.height == 480)
        {
            // iPhone Classic
        }
        if(result.height > 480)
        {
            // iPhone 5
           CGRect mainFrame = CGRectMake(0, 0, 320, 568);
           self.view.frame = mainFrame;
        }
    }

但它没有工作没用

谁能告诉我如何设置框架,谢谢

4

5 回答 5

2

使用它来检查:

#define IS_IPHONE ( [[[UIDevice currentDevice] model] isEqualToString:@"iPhone"])
#define IS_HEIGHT_GTE_568 [[UIScreen mainScreen ] bounds].size.height >= 568.0f
#define IS_IPHONE_5 ( IS_IPHONE && IS_HEIGHT_GTE_568 )
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

所以

if(IS_IPHONE_5)
{
 // Iphone 5 frame
}
else
{
// iphone 4 frame

}

并添加Default-568h@2x.png到您的项目中。

希望它可以帮助你。

于 2013-05-07T07:18:21.400 回答
1

由于以下原因之一,您的代码不起作用

1)如果您旋转设备,请检查您的主屏幕边界。这可能会导致混乱。您可以尝试更好的方式来使用它。

2) 这Default-568h.png仅在使用 Xcode 4.5 和 iOS 6 SDK 构建应用程序时允许

3)当您要求UIScreen它的边界时,您会得到屏幕的边界,即整个设备屏幕。(状态栏是屏幕的一部分)

所以它可能会得到false两个if条件。

您可以使用此代码..

-(BOOL)isDeviceGreaterThaniPhone5
{
    struct utsname systemInfo;
    uname(&systemInfo);

    NSString *modelName = [NSString stringWithCString:systemInfo.machine
                                             encoding:NSUTF8StringEncoding];
    if([modelName isEqualToString:@"iPhone5,1"]) {// @"iPhone 5 (GSM)";
        return YES;
    }
    else if([modelName isEqualToString:@"iPhone5,2"]) {// @"iPhone 5 (GSM+CDMA)";
        return YES;
    }
    else if([modelName isEqualToString:@"iPod5,1"]){ // @"iPod touch 5G";
        return YES;
    }
    return NO;
}

不要忘记导入#import <sys/utsname.h>

于 2013-05-07T07:21:27.433 回答
1

试试这样

if ( [[UIScreen mainScreen] bounds].size.height == 568 ) {

//iphone5 frame

}
else{
//not an iphone5 frame
}

有关详细信息,请查看此

于 2013-05-07T07:22:33.720 回答
0

Nishant 的反应很好,在这里我只是提供一个缩小版,因为你知道高度只是差异,因此在这两种情况下你的框架都通过高度:

这是一个宏:

#define ASSET_BY_SCREEN_HEIGHT(regular, longScreen) (([[UIScreen mainScreen] bounds].size.height <= 480.0) ? regular : longScreen)

在这里如何使用它:

CGRect frame = CGRectMake(0, 0, 320, ASSET_BY_SCREEN_HEIGHT(460, 548));
于 2013-05-07T07:25:52.550 回答
0

它不起作用,因为您应该将视图添加为子视图并等到它被绘制。

对于我的项目,我通过在自动调整大小后将取决于屏幕大小的代码放入 drawRect: 用于 UIViews 和放入 viewDidAppear 用于 UIViewControllers 来解决这个问题。

因此,如果您使用正确的自动调整蒙版,那么您可能不会让您的视图更长: Autoresizing Masks programmatically vs Interface Builder / xib / nib

于 2013-05-07T07:28:05.460 回答