【问题标题】:Swift 3 - @available only for ios 9 and not ios 10Swift 3 - @available 仅适用于 ios 9 而不是 ios 10
【发布时间】:2016-11-22 11:12:47
【问题描述】:

我正在尝试看看这是否可能。看起来在 ios 9 中设置 UICollectionViewFlowLayout 的estimatedItemSize 效果不是很好。它在 ios 10 中运行得非常好。所以我正在考虑只为 ios 9 实现 sizeForItemAt.. 方法。有没有办法使用 @available 来做到这一点?如果有人能阐明这一点,那将非常有帮助。

【问题讨论】:

标签: swift uicollectionview swift3


【解决方案1】:

我想在 iOS 11 版本较低时执行代码,我是这样做的:

if #available(iOS 11, *) {
  // This is probably empty
} else {
  // This code will only be executed if the version is < iOS 11
}

这不是最干净的解决方案,但我找不到更好的方法,它可以发挥作用。 ?

【讨论】:

    【解决方案2】:

    诶?做docs say to do:

    @available(iOS, obsoleted: 10.0)
    

    或者

    @available(iOS, introduced: 9.0, obsoleted: 10.0)
    

    【讨论】:

    • 我尝试了这两个选项,在这两种情况下,它也会在 ios 10 中执行。不知道为什么
    【解决方案3】:
    let systemVersion = UIDevice.currentDevice().systemVersion
    println("iOS\(systemVersion)")
    
    if systemVersion == 9.0 {
      //Do Something
    }
    

    你可以像下面这样使用:

    @available(iOS 10.0, *)
    private func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {
        logParklee.verbose("willPresentNotification")
    }
    

    或者

    if #available(iOS 10, *) {
        // use UIStackView
    } else {
        // show sad face emoji
    }
    

    或者

    guard #available(iOS 9, *) else {
        return
    }
    

    或者

    @available(iOS 7, *)
    func iOS7Work() {
        // do stuff
    
        if #available(iOS 8, *) {
            iOS8Work()
        }
    }
    
    @available(iOS 8, *)
    func iOS8Work() {
        // do stuff
        if #available(iOS 9, *) {
            iOS9Work()
        }
    }
    
    @available(iOS 9, *)
    func iOS9Work() {
        // do stuff
    }
    

    【讨论】:

    • 正如我所说,我希望整个方法只在 iOS 9 上运行,而不是在 iOS10 上运行。您的解决方案正好相反。
    • 更新了我的答案。
    • 再次。我希望整个函数在 iOS 9 而不是 10 上执行。您的版本只讨论#available 而不是@available。如果你看到我的问题,它是关于 sizeForItemAt 是否被调用。
    • @Kesava 第一个代码块似乎很完美,只适用于 iOS 9。
    • 如果我们在 func 中,第一个块可以工作。我说的是用于整个功能的@available。不是为了一段代码。请完整阅读问题。
    猜你喜欢
    • 2017-02-16
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    相关资源
    最近更新 更多