How can I disable landscape orientation?

后端 未结 9 2081
忘掉有多难
忘掉有多难 2020-12-02 22:53

I am making an iPhone app and I need it to be in portrait mode, so if the user moves the device sideways, it does not automatically rotate. How can I do this?

相关标签:
9条回答
  • 2020-12-02 23:11

    If you want to disable landscape orientation for both iPhone and iPad.

    Go to Targets and Go to the General tab. See the below screen and deselect landscape left and landscape right.

    Here in this case only iPhone landscape mode will be disabled not for iPad. For iPad all modes are anabled. If you want select device option from Universal to iPad. It will looks like this. See below screen.

    Now you need to deselect all modes except Portrait for iPad. See below screenshot.

    Now you successfully disabled all modes except Portrait for all devices.

    0 讨论(0)
  • 2020-12-02 23:19

    Xcode 5 and above

    • Click your project in the Project Navigator in the left sidebar to open the project settings
    • Go to the General tab.
    • Uncheck the options you don't want in the Deployment Info section, under Device Orientation

    screenshot showing where to click

    0 讨论(0)
  • 2020-12-02 23:19

    Xcode 8, Xcode 9, Xcode 10 and above

    0 讨论(0)
  • 2020-12-02 23:26

    Swift 3 If you have a navigationController, subclass it like this (for portrait only):

    class CustomNavigationViewController: UINavigationController {
    
      override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return UIInterfaceOrientationMask.portrait
      }
    
      override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
        return UIInterfaceOrientation.portrait
      }
    }
    
    0 讨论(0)
  • 2020-12-02 23:28

    To disable orientations for a particular View Controller, you should now override supportedInterfaceOrientations and preferredInterfaceOrientationForPresentation.

    - (NSUInteger) supportedInterfaceOrientations {
        // Return a bitmask of supported orientations. If you need more,
        // use bitwise or (see the commented return).
        return UIInterfaceOrientationMaskPortrait;
        // return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
    }
    
    - (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation {
        // Return the orientation you'd prefer - this is what it launches to. The
        // user can still rotate. You don't have to implement this method, in which
        // case it launches in the current orientation
        return UIInterfaceOrientationPortrait;
    }
    

    If you're targeting something older than iOS 6, you want the shouldAutorotateToInterfaceOrientation: method. By changing when it returns yes, you'll determine if it will rotate to said orientation. This will only allow the normal portrait orientation.

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        // Return YES for supported orientations
        return (interfaceOrientation == UIInterfaceOrientationPortrait); 
    
        // Use this to allow upside down as well
        //return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
    }
    

    Note that shouldAutorotateToInterfaceOrientation: has been deprecated in iOS 6.0.

    0 讨论(0)
  • 2020-12-02 23:30

    Removing the method shouldAutorotateToInterfaceOrientation from your class entirely also works. If you don't plan on rotating then it makes no sense to have the method in your class, the less code the better, keeps things clean.

    0 讨论(0)
提交回复
热议问题