Xcode 6 使用多个故事板
Posted
技术标签:
【中文标题】Xcode 6 使用多个故事板【英文标题】:Xcode 6 using multiple storyboards 【发布时间】:2014-11-23 20:26:02 【问题描述】:所以我正在制作一个 iPhone 应用程序,我想为每种屏幕尺寸制作不同的故事板。 (iPhone 6 为 1,6 plus 为 1,4 为 1,5 为 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 中的栏,但它仍然无法正常工作。那么我能做些什么来完成这项工作!非常感谢您的帮助!
【问题讨论】:
是的,这是我的真实代码,你不认为它是。 我有它在我的应用程序确实完成启动 对不起,应该被注释掉的,我编辑了它 我重新复制了代码并编辑了问题,删除了旧的并放回了新的 让我们continue this discussion in chat. 【参考方案1】:我自己想出了一个答案。代码略有不同,但效果很好。正如上面 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。
【讨论】:
以上是关于Xcode 6 使用多个故事板的主要内容,如果未能解决你的问题,请参考以下文章