试图让我的应用程序的工作既iPhone 5和iPhone 4 / 4S。 我尝试了“自动版式”,但似乎并没有为我的应用程序工作也看过,它不是在iOS的支持5.自动版式专门失败时有一个UIScrollView的一个视图控制器和重新大小的代码中UIPicker上。 有两个故事板一个4英寸和一个3.5英寸似乎要走的路。
这两个故事板似乎aproch是我的解决方案。 因此,这让我有两个问题;
应该在哪里代码来检测,然后,如果它是一个4 / 4S / 5里去吗? 我假设在didFinishLaunchingWithOptions方法appDelegate.m
如何改变“主要故事板”?
这是一个很好的问题。
你需要做的是什么,
选择您当前4 / 4S的故事板,转到文件,复制,然后给它一个iPhone 5的具体名称。 确保目标和你的应用程序的名称被选中。
接下来,您必须选择你的故事板,并在属性检查器中的场景大小更改为4的Retina全屏。 这使您可以重新安排一切为了此显示。
最后,在应用程序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; }
如果有人不知道要怎么弄第1步,做如下。
转到项目目录,复制粘贴MainStoryboard.storyboard
并重新命名新的故事板说MainStoryboard5.storyboard
。
添加这个新的故事板MainStoryboard5.storyboard
项目(在Xcode)右击项目,然后单击Add Files to ....
现在我们已经在Xcode 2个故事板。
小费
您可能需要使用“产品中心>干净”这个你已经完成了所有上述工作后。
目前唯一的办法是检查,如果你正在使用的iPhone 5是[UIScreen mainScreen] bounds]
和[[UIScreen mainScreen] scale]
。
BOOL isIphone5 = (([[UIDevice currentDevice] userInterfaceIdiom]
== UIUserInterfaceIdiomPhone) && (([UIScreen mainScreen].bounds.size.height *
[[UIScreen mainScreen] scale]) >= 1136));
这只能如果你已经至少增加了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)
的布尔测试是从检测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设备上的默认设置更改此精美的作品 。 如果你是从头开始与现有的非故事板的项目开始,你可以这样来做。
#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];
}
当我开始一个项目,现在我设计出故事板的iPhone 3.5" 版(如果我使用故事板),然后当我与设计我进入我的项目文件并找到故事板文件来完成。由于故事板文件只是一个XML布局文件,我可以把该文件,并在我最喜欢的文本编辑器加载它,改变两个标签。
转换iPhone到iPad
- 在文件的顶部找到
targetRuntime="iOS.CocoaTouch
” - 更改为
targetRuntime="iOS.CocoaTouch.iPad"
- 广告你会发现这个文件的底部
<simulatedScreenMetrics key="destination" type="retina4"/>
- 更改为
<simulatedScreenMetrics key="destination"/>
如果你的主要故事板文件被设定为4" iPhone屏幕的最后一个项目才会出现。
这里重要的是,如果你只是将iPhone 5,以现有的项目,你只需要在第一次检查覆盖默认,并加载你的特殊故事板文件。 字面上救了我不必手动布局代码中的所有对象为iPhone 5。
第一个工作非常好的是简单明了,但对于所有的,如果你想整合多重设备看这里:
创建的iPhone5与命名iPhone5_Storyboard故事板的项目。
关闭应用程序和文件夹中克隆主要的故事叫iPhone5_Storyboard和重命名,以iPhone4_Storyboard不要忘记改变大小和重新排列的Xcode界面生成器中的所有对象。
可选的,如果你想有一个通用版本,Xcode中使用的内部添加文件和增加新的故事板空的目标为iPad,OPE未iphone5_storyboard使用CMD + A,并复制,并在iPad上的空故事粘贴(需要重新排序的对象,但所有链接和工作)。
在Xcode目标下成立通用的应用程序和设置MainStoryboard你iPhone5_Storyboard下,下iPad的主要故事设定iPad_Storyboard。
现在, 多亏了这个帖子 ,我们必须实现使用AppDelegate.m这里面的代码都不同故事的第一个答案 :
- (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和视网膜
多谢你们