如何设置iPhone 5的帧大小

时间:2013-05-07 07:15:50

标签: iphone ios frame iphone-5 autoresize

我正在设置我的iphone应用程序屏幕框架以支持iphone 5,我已经设置了自动调整大小模板mask,我也尝试使用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;
        }
    }

但它没有工作didn't work

任何人都可以告诉我如何设置框架,而不是提前

5 个答案:

答案 0 :(得分: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

希望它对你有所帮助。

答案 1 :(得分:1)

您的代码不适用于以下原因之一

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

2)只有在使用Xcode 4.5和iOS 6 SDK构建应用时才允许Default-568h.png

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>

答案 2 :(得分:1)

尝试这样,

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

//iphone5 frame

}
else{
//not an iphone5 frame
}

了解详情check this one

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

答案 4 :(得分:0)

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

对于我的项目,我通过在autRizing到drawRect之后放置一个依赖于屏幕大小的代码来解决这个问题:对于UIViews和对于UIViewControllers的viewDidAppear。

因此,如果您使用正确的自动调整遮罩,则可能无法延长视图时间: Autoresizing masks programmatically vs Interface Builder / xib / nib