我有一个现有的iOS应用程序,它支持iOS 8.我想为iOS 9添加新功能。
我为iOS 9创建了一个新的故事板,它使用了UIStackView等iOS 9功能。基于Device OS版本实例化适当的故事板文件。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let storyboard: UIStoryboard
if #available(iOS 9, *, *) {
storyboard = UIStoryboard(name: "Main", bundle: nil)
} else {
storyboard = UIStoryboard(name: "MainOld", bundle: nil)
}
let mainViewController = storyboard.instantiateInitialViewController()
window?.rootViewController = mainViewController
window?.makeKeyAndVisible()
return true
}
但我在Main.storyboard" iOS 9.0及#34之前的UIStackView上遇到编译错误;
我正在使用Xcode 7 beta 5。
如何使用Swift 2 #availability检查
在iOS 8支持的项目中使用iOS 9相关功能答案 0 :(得分:3)
我在Apple Cocoa开发者电子邮件列表中得到了Quincey Morris的回答。
默认 故事板文件的文件检查器中的构建设置是"部署目标",这是iOS 8,因此编译器会抛出错误。
如果我改变" Build for"在使用iOS 9功能的故事板上设置为iOS 9。没有错误,应用程序在iOS 8和iOS 9中运行。
答案 1 :(得分:2)
您无法在StoryBoard中使用此类#availability
功能。如果您希望使用UIStackView
支持iOS 8,则应从代码构建UIStackView
,或使用第三方的兼容库。与OAStackView或TZStackView一样。
答案 2 :(得分:1)
我创建了两个故事板,一个用于iOS 8,另一个用于iOS 9及更高版本。 对于iOS 9故事板,请转到文件检查器并将最小目标设置为iOS 9,将iOS8设置为iOS 8。
然后在代码中,无论您为该故事板使用创建初始视图控制器,还是使用:
if #available(iOS 9.0, *) {
// create view controller from iOS 9 storyboard
} else {
//create view controller from iOS 8 storyboard
}
错误应该发生。显然它需要管理更多的代码,但是你得到了原生的UIStack,当你放弃iOS8支持时,你仍然拥有功能齐全的ios9故事板