Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to know current interfaceOrientation in extension of iOS 8?

InterfaceOrientation of UIViewController is deprecated and the Document suggest to use [[UIApplication sharedApplication] statusBarOrientation], but there is no sharedApplication in an extension of iOS 8.


As @Retro mentioned, in most circumstances, you can use self.traitCollection.verticalSizeClass or self.traitCollection.horizontalSizeClass in a UIViewController to get orientation information.

like image 309
Henry Avatar asked Aug 07 '14 09:08

Henry


2 Answers

A UITraitCollection object provides details about the characteristics of a UIViewController object, which manages a set of views that make up a portion of your app’s interface. These characteristics, or traits, define the size class, display scale, and device idiom of the view controller. When a view controller is created, a trait collection is automatically created for that view controller.

You can create and modify a view controller’s trait collection to customize your app. The following methods create a new trait collection containing only the passed parameter:

traitCollectionWithDisplayScale:

traitCollectionWithUserInterfaceIdiom:

traitCollectionWithHorizontalSizeClass:

traitCollectionWithVerticalSizeClass:
like image 141
Retro Avatar answered Oct 21 '22 16:10

Retro


Non-deprecated and will work on any device screen size (including future screen sizes Apple will be releasing this year).

-(void)viewDidLayoutSubviews {
    NSLog(@"%@", self.view.frame.size.width == fminf([[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height) ? @"Portrait" : @"Landscape");
}

Thanks @anneblue for helping shorten the code!

like image 43
Albert Renshaw Avatar answered Oct 21 '22 16:10

Albert Renshaw