Xcode 6使用多个故事板

时间:2014-11-23 20:26:03

标签: ios xcode uistoryboard

所以我正在制作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中用于默认界面的栏,但它仍然无效。那么我该怎么做才能做到这一点!我真的很感谢你的帮助!

1 个答案:

答案 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。