所以我正在制作iPhone应用程序,我想为每个屏幕尺寸设置不同的故事板。 (1为iPhone 6,1为6 plus,1为4,1为5)我知道我可以使用大小类,但我有理由想要使用多个故事板。无论如何为了做到这一点,我把以下代码放在我的app delegate ...
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen] .bounds];
UIStoryboard *storyboard = nil;
if ([[UIDevice currentDevice] userInterfaceIdiom] ==UIUserInterfaceIdiomPad) {
storyboard = [UIStoryboard storyboardWithName:@"3inchstoryboard" bundle:nil];//iPad
} else {
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
if (screenSize.height == 480){
storyboard = [UIStoryboard storyboardWithName:@"3inchstoryboard" bundle:nil];//iPhone 3.5inch
} else
if (screenSize.height == 568){
storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];//iPhone 4inch
}
else
{ if (screenSize.height == 667){
//storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];//iPhone 4.7inch
} else
if (screenSize.height == 736){
storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];//iPhone 5.5inch
} else
//default storyboard
storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
}
}
self.window.rootViewController = [storyboard instantiateInitialViewController];
[self.window makeKeyAndVisible];
此代码不起作用。每次运行它时,无论屏幕大小如何,设备总是会转到代码底部的默认值。它仅适用于我的iPhone 5,而我的iPhone 5运行的是iOS 7.我已经删除了plist中用于默认界面的栏,但它仍然无效。那么我该怎么做才能做到这一点!我真的很感谢你的帮助!
答案 0 :(得分:0)
我自己想出了答案。代码略有不同,但效果很好。如上所述,Matt将NSLogs放入您的代码中非常重要,这样您就可以了解正在运行的内容和不运行的内容。第一件事是我将这个代码用于横向应用程序。有一个简单的解决方案。您必须将单词高度更改为宽度。另一件事是,如果您没有启动图像文件,这对iPhone 6或6 plus不起作用。不仅仅是常规的xcasset,你还必须有一个xib作为在Xcode 6中添加的启动图像。代码如下,请注意在#define中它表示高度,如果你在LANDSCAPE应用程序中使用它更改高宽。
......这就在“#import AppDelegate.h”
的正确位置#define IS_IPHONE_4 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)480) < DBL_EPSILON)
#define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)568) < DBL_EPSILON)
#define IS_IPHONE_6 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)667) < DBL_EPSILON)
#define IS_IPHONE_6_PLUS (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)736) < DBL_EPSILON)
...这是你的“视图确实完成了选项启动”
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
if (IS_IPHONE_4) {
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"iPhone4board" bundle:[NSBundle mainBundle]];
UIViewController *vc =[storyboard instantiateInitialViewController];
self.window.rootViewController = vc;
NSLog(@"iPhone 4 storyboard loaded up.");
}
else if(IS_IPHONE_6) {
UIStoryboard *storyboard1 = [UIStoryboard storyboardWithName:@"iPhone6board" bundle:[NSBundle mainBundle]];
UIViewController *vc1 =[storyboard1 instantiateInitialViewController];
self.window.rootViewController = vc1;
NSLog(@"iPhone 6 storyboard loaded up.");
}
else if(IS_IPHONE_5) {
UIStoryboard *storyboard1 = [UIStoryboard storyboardWithName:@"iPhone5board" bundle:[NSBundle mainBundle]];
UIViewController *vc2 =[storyboard1 instantiateInitialViewController];
self.window.rootViewController = vc2;
NSLog(@"iPhone 5 storyboard loaded up.");
}
[self.window makeKeyAndVisible];
...如果您使用的是横向应用程序,则无法将屏幕从横向左侧旋转到横向右侧,反之亦然。
如果您希望能够这样做,您可以删除此行... self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
如果您的代码在删除之后无法正常工作,请将其重新放入并且不要让它旋转。
该代码有效,如果您有任何问题,请发表评论。无需从plist或常规页面中删除任何内容。
此外,如果您想添加六个加号行,只需复制并粘贴其他一个if语句,然后将其更改为#define IS_IPHONE_6_PLUS。只需确保在两个位置将其从vc1 2或vc更改为vc3。