在iOS 6中启用Autolayout,在iOS6中禁用Autolayout
如果您正在使用故事板,创建两个故事板,一个具有自动布局功能,另一个具有自动布局功能。然后检查的一种方法是基于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启用自动布局,您可以创建一个故事板(或笔尖)自动布局,并使用上面的版本检查加载它们
你如何设置'mainStoryboard'?在App Delegate中设置故事板的代码是什么? – JimmyJammed
@JamesHickman我已经更新了上面的代码,以显示我是如何做到的。希望能帮助到你... –
要么你应该使用两个xib文件,或者你应该在编写自动布局和约束代码之前以编程方式检查它。
如何以编程方式检查它?我一直在使用xib文件,顺便说一句。 :) –
有多种方式:从UIDevice类,你可以有版本字符串。通过检查respondsToSelector,您可以检查特定属性的可用性。 – Apurv
另外,考虑到非自动布局还没有被弃用(即它仍然被支持),你总是可以考虑完全关闭自动布局并调用它一天。只提供一个非自动布局的应用程序。或者,您是否计划通过iOS 6用户的自动布局启用某些功能,而不向iOS 5用户展示?但是,如果你经历了很多工作才能让应用程序适用于iOS 5,我不确定为什么你也要做一个自动布局版本。 – Rob