xcode 4.5如何在发布时select故事板
试图使我的应用程序与iPhone 5和iPhone 4 / 4s一起工作。 我尝试了“AutoLayout”,但似乎并没有为我的应用程序工作也读取,它不支持在iOS 5中。AutoLayout具体失败的视图控制器有一个UIScrollview和UIPicker在代码中重新resize。 有两个故事板一个4英寸,一个3.5英寸似乎要走的路。
这两个Storyboard aproch似乎是我的解决scheme。 所以这给我留下了两个问题。
-
代码在哪里检测,然后如果是4 / 4s / 5去? 我会假设在didFinishLaunchingWithOptions方法中的appDelegate.m
-
我如何更改“主要故事板”?
这是一个很好的问题。
你需要做的是,
-
select你当前的4/4故事板,去文件,复制,然后给它一个iPhone 5的具体名称。 确保Target和您的应用程序名称被选中。
-
接下来,您必须select故事板中的场景,并在“属性”检查器中将大小更改为Retina 4全屏。 这使您可以重新排列此显示的所有内容。
-
最后在应用程序didFinishLaunchingWithOptions粘贴下面的代码与您为4英寸故事板提供的故事板名称。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){ UIStoryboard *storyBoard; CGSize result = [[UIScreen mainScreen] bounds].size; CGFloat scale = [UIScreen mainScreen].scale; result = CGSizeMake(result.width * scale, result.height * scale); if(result.height == 1136){ storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone_5" bundle:nil]; UIViewController *initViewController = [storyBoard instantiateInitialViewController]; [self.window setRootViewController:initViewController]; } } return YES; }
如果有人不知道如何做第一步,请按照以下步骤操作。
-
转到项目目录并复制粘贴
MainStoryboard.storyboard
并重命名新的故事板来说MainStoryboard5.storyboard
。 -
通过右键单击“项目”并单击“
Add Files to ....
在项目中添加新的故事板MainStoryboard5.storyboard
(在Xcode中)。 -
现在我们有两个xcode的故事板。
小费
完成上述所有操作后,您可能需要使用“产品>清洁”才能使用。
目前唯一的方法是检查你使用的是iPhone 5的[UIScreen mainScreen] bounds]
和[[UIScreen mainScreen] scale]
。
BOOL isIphone5 = (([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) && (([UIScreen mainScreen].bounds.size.height * [[UIScreen mainScreen] scale]) >= 1136));
这只有在您至less添加了一个Default-568h@2x.png
启动图像到您的应用程序。 否则这将始终返回false。 (因为如果您没有启动图像,屏幕将被置信箱)
要设置故事板到你的iPhone 5版本,你可能想看看这个问题
我在fields.cage上获取灵感,并将其改编为我的代码,它工作正常。 谢谢 !!
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){ UIStoryboard *storyBoard; CGSize result = [[UIScreen mainScreen] bounds].size; CGFloat scale = [UIScreen mainScreen].scale; result = CGSizeMake(result.width * scale, result.height * scale); if(result.height == 1136){ self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone5" bundle:nil] autorelease]; } else { self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil] autorelease]; } }
我最近做的是在任何需要检查设备的类中添加一个定义语句。 这也可以在任何全局头文件中完成。
#define IS_IPHONE (!IS_IPAD) #define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone)
布尔testing是从检测iPhone 5 4“屏幕 。
bool isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136)); if (isiPhone5) { // Setup For iPhone 5 Screen Size UIStoryboard *storyBoard; storyBoard = [UIStoryboard storyboardWithName:@"MyiPhone5StoryboardName" bundle:nil]; UIViewController *initViewController = [storyBoard instantiateInitialViewController]; [self.window setRootViewController:initViewController]; }
如果您已经在使用故事板 ,并且只想从您的项目为iPhone 5设备启动的默认设置中更改故事板 , 则此function非常精美 。 如果您从现有的非故事板项目开始,可以这样做。
#define IS_IPHONE (!IS_IPAD) #define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone) bool isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136)); if (isiPhone5) { // Load iPhone 5 Storyboard UIStoryboard *storyBoard; storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone5" bundle:nil]; UIViewController *initViewController = [storyBoard instantiateInitialViewController]; [self.window setRootViewController:initViewController]; } else if (IS_IPAD) { // Load IPAD StoryBoard UIStoryboard *storyBoard; storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil]; UIViewController *initViewController = [storyBoard instantiateInitialViewController]; [self.window setRootViewController:initViewController]; } else { // Load the iPhone 3.5" storyboard UIStoryboard *storyBoard; storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; UIViewController *initViewController = [storyBoard instantiateInitialViewController]; [self.window setRootViewController:initViewController]; }
当我开始一个项目,现在我devise的故事板的iPhone 3.5“版本(如果我使用故事板),那么当我完成了这个devise,我进入我的项目文件,并find故事板文件由于故事板文件只是一个XML布局文件,我可以把这个文件,并加载在我最喜欢的文本编辑器,并更改两个标签。
将iPhone转换为iPad
- 在文件顶部find
targetRuntime="iOS.CocoaTouch
” - 更改为
targetRuntime="iOS.CocoaTouch.iPad"
- 广告底部的文件,你可能会发现这个
<simulatedScreenMetrics key="destination" type="retina4"/>
- 将其更改为
<simulatedScreenMetrics key="destination"/>
最后一个项目只有在您的主要故事板文件设置为4“iPhone屏幕时才会出现。
这里重要的是如果你只将iPhone 5添加到现有的项目,你只需要第一次检查来覆盖默认,并加载你的特殊故事板文件。 这从字面上保存我不必手动布局iPhone 5代码中的所有对象。
第一个工作非常好,简单明了,但是如果你想集成多个设备,请看这里:
-
使用名为iPhone5_Storyboard的Storyboard创build一个iPhone5项目。
-
closures应用程序,并在文件夹内克隆名为iPhone5_Storyboard的主要故事,并重命名为iPhone4_Storyboard不要忘记更改大小,并重新排列xcode界面生成器内的所有对象。
-
可选如果你想要一个通用的版本,在Xcode里面使用添加文件和添加新的故事板EMPTY目标为iPad,运行un iphone5_storyboard使用CMD + A和复制全部并粘贴在iPad的空故事(需要重新sorting对象,但全部链接和工作)。
-
在TARGET下的Xcode中设置通用应用程序,并在MainStoryboard下设置iPhone5_Storyboard,在iPad Main Story设置iPad_Storyboard下。
-
现在感谢这篇文章的第一个答案,我们必须在AppDelegate.m中使用这个代码来实现所有不同的Story:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){ UIStoryboard *storyBoard; CGSize result = [[UIScreen mainScreen] bounds].size; CGFloat scale = [UIScreen mainScreen].scale; result = CGSizeMake(result.width *scale, result.height *scale); //----------------HERE WE SETUP FOR IPHONE4/4s/iPod---------------------- if(result.height == 960){ storyBoard = [UIStoryboard storyboardWithName:@"iPhone4_Storyboard" bundle:nil]; UIViewController *initViewController = [storyBoard instantiateInitialViewController]; [self.window setRootViewController:initViewController]; } //----------------HERE WE SETUP FOR IPHONE3/3s/iPod---------------------- if(result.height == 480){ storyBoard = [UIStoryboard storyboardWithName:@"iPhone4_Storyboard" bundle:nil]; UIViewController *initViewController = [storyBoard instantiateInitialViewController]; [self.window setRootViewController:initViewController]; } } return YES; }
这就是现在我们有一个通用的应用程序的iPhone 3 / 3Gs / 4 / 4s / 5的iPod(AllGen的)的iPad 1/2/3/4迷你和视网膜
多谢你们