How can Xcode 6 adaptive UIs be backwards-compatible with iOS 7 and iOS 6?

Changes made to the UI with Size Classes in Interface Builder DO appear correctly on iOS 7 devices and the Preview in Xcode. For example, I changed some Auto Layout constraints and font sizes for Regular height Regular width and those changed constraints are visible in the iPad Simulator running iOS 7.0.

All size class optimizations are made available to iOS 7, except size classes that have a Compact Height. This has been confirmed by Apple and is now stated directly in the documentation:

For apps supporting versions of iOS earlier than iOS 8, most size classes are backward compatible.

Size classes are backward compatible when:
– The app is built using Xcode version 6 or later
– The deployment target of the app is earlier than iOS 8
– Size classes are specified in a storyboard or xib
– The value of the height component is not compact

Because iOS 7 doesn’t respect a couple of size classes, if you use them you’ll run into issues. For example:
When you have Compact w Any h defined and then Compact w Compact h defined, on iOS 7 it will respect the Compact w Any h but on iOS 8 it renders the Compact w Compact h appearance.

So, if you would like to utilize those two size classes and maintain compatibility with iOS 7, I would do any optimizations you desire for iPhone in landscape in Any w Any h or Compact w Any h, then perform your other optimizations for different size classes as necessary, and that way you won’t need to use any size class with compact height and will avoid running into issues.

Leave a Comment