37
votes

I want to create an application that doesn't use Portrait mode.

I am not sure if I need to edit the plist or have code in addition to the plist

4

4 Answers

47
votes

Code found here

Launching in Landscape Mode

Applications in iPhone OS normally launch in portrait mode to match the orientation of the Home screen. If you have an application that runs in both portrait and landscape modes, your application should always launch in portrait mode initially and then let its view controllers rotate the interface as needed based on the device’s orientation. If your application runs in landscape mode only, however, you must perform the following steps to make it launch in a landscape orientation initially.

  • In your application’s Info.plist file, add the UIInterfaceOrientation
    key and set its value to the
    landscape mode. For landscape
    orientations, you can set the value
    of this key to
    UIInterfaceOrientationLandscapeLeft
    or
    UIInterfaceOrientationLandscapeRight.

  • Lay out your views in landscape mode and make sure that their autoresizing options are set correctly.

  • Override your view controller’s shouldAutorotateToInterfaceOrientation: method and return YES only for the
    desired landscape orientation and NO
    for portrait orientations.

29
votes

To make your app landscape mode only, you should use "Supported Interface Orientations". (Targets -> YourApp -> Supported Interface Orientations -> Landscape Left & Right)

Supported Interface Orientations

You should also set the app's orientation in your app's Info.plist file (Info.plist file) by appending the Supported interface orientations key with the values Landscape (left home button) and Landscape (right home button). row's

You may use willRotateToInterfaceOrientation and/or didRotateFromInterfaceOrientation to handle orientation changes.


shouldAutorotateToInterfaceOrientation is deprecated from iOS 6 and out.

Returning UIDeviceOrientationLandscapeLeft/Right for shouldAutorotateToInterfaceOrientation should make your app "landscape":

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

Also may also change your app's Info.plist and View Orientation (as explained above).


Additionally, I recommend changing your view's orientation to Landscape in the Attributes Inspector. landscape

26
votes

You could also just shorten it all to

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}
10
votes

edit the plist to only support landscape, then make sure that in every uiviewcontroller/uitabbar etc., in the shouldAutoRotateToInterfaceOrientation, the return says return ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (interfaceOrientation == UIInterfaceOrientationLandscapeRight));.