我正在设置我的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;
}
}
但它没有工作,
任何人都可以告诉我如何设置框架,而不是提前
答案 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