web-dev-qa-db-fra.com

Swift 3 - @ disponible uniquement pour ios 9 et non pour ios 10

J'essaie de voir si c'est possible. On dirait que la définition deIstItemSize de UICollectionViewFlowLayout ne fonctionne pas très bien dans iOS 9. Cela fonctionne parfaitement bien dans iOS 10. Je pense donc à mettre en œuvre la méthode sizeForItemAt .. uniquement pour iOS 9. Existe-t-il un moyen de le faire en utilisant @available ?? Sera vraiment utile si quelqu'un peut faire la lumière.

8
Kesava

Je voulais exécuter du code lorsque la version est inférieure à iOS 11, voici comment je l'ai fait:

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

Ce n'est pas la solution la plus propre, mais je ne pouvais pas trouver un meilleur moyen et cela fait son travail.

8
Jan Schlorf

Hein? Faites comme les docs disent faire :

@available(iOS, obsoleted: 10.0)

Ou

@available(iOS, introduced: 9.0, obsoleted: 10.0)
7
user28434
let systemVersion = UIDevice.currentDevice().systemVersion
println("iOS\(systemVersion)")

if systemVersion == 9.0 {
  //Do Something
}

Vous pouvez utiliser comme ci-dessous:

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

Ou 

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

Ou 

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

Ou 

@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
}
1
Parth Adroja