I am trying to see if this is possible. Looks like setting UICollectionViewFlowLayout's estimatedItemSize doesn't work very good in ios 9. It works perfectly fine ios 10. So i am thinking of implementing sizeForItemAt.. method only for ios 9. Is there anyway to do that using @available ?? Will be really helpful if someone can shed light.
Asked
Active
Viewed 8,334 times
13
-
**Swift 3 and 4** [Link to **exact solution** to your question](https://stackoverflow.com/a/42358077/7668778) – alegelos Jul 31 '18 at 09:39
-
Possible duplicate of [Check OS version in Swift?](https://stackoverflow.com/questions/24503001/check-os-version-in-swift) – alegelos Jul 31 '18 at 09:41
3 Answers
13
I wanted to execute code when the version is lower iOS 11, here's how I did it:
if #available(iOS 11, *) {
// This is probably empty
} else {
// This code will only be executed if the version is < iOS 11
}
It's not the cleanest solution, but I couldn't find a better way and it does its job.

Jan Erik Schlorf
- 2,050
- 21
- 36
6
Eh? Do as docs say to do:
@available(iOS, obsoleted: 10.0)
Or
@available(iOS, introduced: 9.0, obsoleted: 10.0)

user28434'mstep
- 6,290
- 2
- 20
- 35
-
5I tried both the options, in both cases, it gets executed in ios 10 as well. Not sure why – Kesava Nov 22 '16 at 12:08
3
let systemVersion = UIDevice.currentDevice().systemVersion
println("iOS\(systemVersion)")
if systemVersion == 9.0 {
//Do Something
}
You can use like below:
@available(iOS 10.0, *)
private func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {
logParklee.verbose("willPresentNotification")
}
Or
if #available(iOS 10, *) {
// use UIStackView
} else {
// show sad face emoji
}
Or
guard #available(iOS 9, *) else {
return
}
Or
@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
}

Parth Adroja
- 13,198
- 5
- 37
- 71
-
3As i said, I want the entire method to be run only on iOS 9 and not on iOS10. Your solution works the other way around. – Kesava Nov 22 '16 at 11:21
-
-
Again. I want the entire func to be executed on iOS 9 and not on 10. Your version talks only about #available and and not @available. If you see my question, its about sizeForItemAt getting called or not. – Kesava Nov 22 '16 at 11:29
-
@Kesava First code block seems to be perfect and will work only in iOS 9. – BaSha Nov 22 '16 at 11:43
-
1First block works if we are inside a func. I am talking about @available which is for the whole func. not for a piece of code. Please read the question fully. – Kesava Nov 22 '16 at 12:00