在iOS 6中启用Autolayout,在iOS6中禁用Autolayout

问题描述:

如果我的项目支持iOS版本4.3及更高版本,如何在iOS6 中启用自动布局,但将其禁用到较低版本?在iOS 6中启用Autolayout,在iOS6中禁用Autolayout

+0

另外,考虑到非自动布局还没有被弃用(即它仍然被支持),你总是可以考虑完全关闭自动布局并调用它一天。只提供一个非自动布局的应用程序。或者,您是否计划通过iOS 6用户的自动布局启用某些功能,而不向iOS 5用户展示?但是,如果你经历了很多工作才能让应用程序适用于iOS 5,我不确定为什么你也要做一个自动布局版本。 – Rob

如果您正在使用故事板,创建两个故事板,一个具有自动布局功能,另一个具有自动布局功能。然后检查的一种方法是基于os版本加载任意一个。

我用这个小宏

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:(v) options:NSNumericSearch] != NSOrderedAscending) 

这应该工作太(在某些情况下则上述可能更好):

if ([NSLayoutConstraint class]) { 
    // >= 6.0 
} else { 
    // < 6.0 
} 

,然后在我的appDelegate:

UIStoryboard *mainStoryboard = nil; 

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) 
{ 
    mainStoryboard = [UIStoryboard storyboardWithName:@"AutoLayoutStoryboard" bundle:nil]; 
} 
else 
{ 
    mainStoryboard = [UIStoryboard storyboardWithName:@"NoAutoLayoutStoryboard" bundle:nil]; 
} 

//load initial view controller 
UIViewController *rootView = [mainStoryboard instantiateInitialViewController]; 
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
self.window.rootViewController = rootView; 
[self.window makeKeyAndVisible]; 

ADD:如果您使用的是笔尖,并且只想为iOS6启用自动布局,您可以创建一个故事板(或笔尖)自动布局,并使用上面的版本检查加载它们

+0

你如何设置'mainStoryboard'?在App Delegate中设置故事板的代码是什么? – JimmyJammed

+0

@JamesHickman我已经更新了上面的代码,以显示我是如何做到的。希望能帮助到你... –

要么你应该使用两个xib文件,或者你应该在编写自动布局和约束代码之前以编程方式检查它。

+1

如何以编程方式检查它?我一直在使用xib文件,顺便说一句。 :) –

+0

有多种方式:从UIDevice类,你可以有版本字符串。通过检查respondsToSelector,您可以检查特定属性的可用性。 – Apurv