My apps use code to put objects on the screen and the layout of my apps changes depending on the orientation of the device. I had been using statusBarOrientation to determine the orientation, but it as been deprecated as of iOS 9. It still works in iOS 11 but since I have to update my apps anyway for iPhone X, I decided that now would be as good a time as any to update the code.
I believe the reason for the deprecation is that now apps can appear in a sidebar, so they don’t have a status bar. I have not enabled that behaviour in my apps, so it doesn’t affect me. The recommended way to get the orientation is to look at the screen size.
I had been using this line at the top of each file where I needed to do something depending on orientation.
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
I use a utilities class for things that I use across classes, so I decided to put it there so I could change it easily if I needed to at some point in the future.
+ (NSString *) orientation {
CGSize screenSize = [UIScreen mainScreen].bounds.size;
NSString *deviceOrientation = @"Portrait";
if (screenSize.height < screenSize.width) {
deviceOrientation = @"Landscape";
}
return deviceOrientation;
}
The replacement code in each class is:
NSString *orientation = [Utilities orientation];
The enum UIInterfaceOrientation has not been deprecated, so I could have returned one of the values and not had to change any other code, but the conditionals are messy and hard to read,
if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown)
so I decided to return a string instead to make the code easier to read, e.g.
if ( [orientation isEqualToString:@"Portrait"] ) {