簡體   English   中英

Xcode 6使用多個情節提要

[英]Xcode 6 using multiple storyboards

因此,我正在制作一個iPhone應用程序,我希望每種屏幕尺寸都有一個不同的故事板。 (iPhone 6為1,6 plus為1,4為1,5為1,1)我知道我可以使用大小類,但是我有理由要使用多個故事板。 無論如何,為了做到這一點,我在我的應用程序委托中放置了以下代碼...

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中的欄,但仍然無法使用。 那么我該怎么做才能使這項工作成功! 我將衷心感謝您的幫助!

我自己想出了一個答案。 代碼稍有不同,但是效果很好。 正如Matt所說,將NSLogs放入代碼中很重要,這樣您才能知道正在運行的內容和未運行的內容。 第一件事是我在風景應用程序中使用了此代碼。 有一個簡單的解決方案。 您必須將單詞高度更改為寬度。 另一件事是,如果您沒有啟動圖像文件,這將不適用於iPhone 6或6 plus。 不僅是普通的xcasset,還必須有一個xib作為啟動映像,該映像已添加到Xcode 6中。下面的代碼,請注意,如果您在LANDSCAPE應用程序更改中使用它,則在#define中將其表示為高度。高到寬。

...就在它說“ #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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM