High level changes
|UISplitViewController||supported on iPhone as well as iPad with new collapsed property PFB|
|UINavigationController||added options to condensing and hiding PFB|
|UIPresentationController||provides advanced view and transition management for presented view controllers PFB|
|UIPrinterPickerController||view controller-based way to display a list of printers|
|UIPopoverPresentationController||manages the display of content in a popover|
Methods for showing view controller are changed to;
- showViewController: sender: - replacement for all showing view controller methods
- showDetailViewController: sender: - its implimented by split view controller
Previously we used to differentiate orientation with UIInterfaceOrientation and UIUserInterfaceIdiom, in iOS 8 insteed of this there is a new concept of Size Classes. Size Classes have four different variations based on Vertical, Horizontal, Regular and Compact ie;
- Horizontal Regular - iPad landscape, iPhone portrait
- Horizontal Compact - iPhone landscape
- Vertical Regular - iPad portrait
- Vertical Compact - iPhone portrait, iPhone landscape
Traits and Trait collectionsTraits are the bunch of properties that we can use to determine how the layout of your application should change as its environment changes. It is consist of following properties;
- Horizontal size class - Regular / Compact
- Vertical size class - Regular / Compact
- User interface idiom - iPhone / iPad / iPod Touch
- Display scale - 1.0 / 2.0
All these Traits and its values are wrapped in a container i.e; Trait Collections. Trait Environments of a child are inherited from its parent because of this we can access Trait Environments till root from any child. We can get change notification with traitCollectionDidChange: method and override it in UIView and UIViewController subclasses to react to a trait change.
Trait Environments (a.k.a UITraitEnvironment) is a protocol which provides access to a view collection’s traits (object.traitCollection) and a way to track changes in the trait collection ([object traitCollectionDidChange:]). Its confirmed by most of the objects in view hierarchy i.e; Screen > Window > View Controller(s) > View(s) UIViewController adopts traits and the new sizing techniques for adjusting the view controller’s content. Traits are consist of Size Class, Display Scale and Idiom for a particular view object. Size Class coarsely defines the space available and categorizes available space horizontally and vertically.
Trait Collection are also implemented in UIImage so that we can provide image for any size rather then 1x and 2x versions using Assets Catalog. UIImage view automatically picks the write image based on its Trait Collection, this will be usefull in such case when we need saperate image with respect to varity of size classes.
We can also add multiple Trait Collection with the help of traitCollectionWithTraitsFromCollections:, on addition the unspecified Traits are filled by the specified and for multiple specified Traits, the last one will be picked.
UIViewController also have new methods which helps Parent View Controller to override the traits for a child, i.e;
- -(void)setOverrideTraitCollection: forChildViewController:
- -(UITraitCollection *)overrideTraitCollectionForChildViewController:
Split View ControllerUISplitViewController is by default collapsed for horizontally compact container (e.g; iPhone, iPod Touch..) otherwise they are expended, the same can be changed further. We can also adjust the % width of both partitions a UISplitViewController.
Good to know: We can also track split view controller expand/collapse with UIViewControllerShowDetailTargetDidChangeNotification in NSNotificationCenter
Navigation Controller CondensingThere are several awaited features are implimented in UINavigationController, auto and manual toggling nav bar i.e;
- navController.hideBarOnTap - to enable auto toggle hide/show on tapping
- navController.condensesBarOnSwiped - to enable safari like auto condensing bars
- navController.hidesBarWhenVerticallyCompact - to enable auto hides bar for vertically mode
- navController.condensesBarsWhenKeyboardAppears - to enable auto condensing bars when keyboard appears
- navController.navugationBarCondensed - to manually toggle nav bar
Presentation ControllersPresentation Controller enhance the exesting API for creating custom presentation, all presentation styles now have an associated Presentation Controller with them. Some new presentation styles are introduced as well, i.e;
- UIModelPresentationOverFullscreen - shown like an overlay which means it don't remove the presenting view controller
- UIModelPresentationOverCurrentContext - cover upon the presenting view controller only
- UIModelPresentationPopover - it is more like a popover itself
Presentation Controllers can easily adapt to size class change. We can use Adaptive Presentations (a.k.a UIAdaptivePresentationControllerDelegate) to track the presentation orientation change. We can create custom presentation controllers which will adapt if shouldPresentInFullscreen returns YES.
Transition Coordinators (a.k.a UIViewControllerTransitionCoordinator) are part of the UIViewController adaptive UI story. During an active view controller transition, use Transition Coordinator to respond to user cancelation of the transition to run a custom animation or register a completion handler. UIContentContainer can help you to adapt the contents of your view controllers to size and trait changes. New methods are added to it to provide support for Trait, i.e;
- -(void)willTransictionToTraitCollection:withTransitionCoordinator: -
- -(void)viewWillTransitionToSize:withTransitionCoordinator: -
UIScreen is now interface oriented, which means;
- -[UIScreen bounds] are interface-oriented
- -[UIScreen applicationFrame] are interface-oriented
- Status bar frame notification are interface-oriented
- Keyboard frame notification are interface-oriented
New in Interface Builder
- We can use same Storyboard/XIB for any screen size of all iOS devices like iPhone4S, iPhone5, iPad..
- We can deploy backwards to iOS 6 and iOS 7
- We can preview devices, orientation and OS versions. Go to Jump Bar > Preview Assistance > Chose plus button from bottom to select device and desired orientation
- We can to use Auto Layout to design flexible UI
- We can remove or add unique Auto Layout constraints for each screen size
- We can use Assets Catalog for images to use different versions of same image based on size
- We can override subviews for specific size class