[英]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.