Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS 8 upside down orientation, XCode option enabled, still doesn't work

I have a universal application being developed in iOS8 (XCode 6.1.1). It will support all the 4 orientations (left, right, portrait & upside down).

The problem is that, although in XCode the four options for supported orientations are checked, only left, right & portrait are working properly. So, is there a bug on XCode or iOS8? My info.plist shows all the supported orientations, but when I run the app on simulator or on the device it doesn't 'flip' the orientation when it's upside down. (PS: it's an singleview app, it doesn't have any navigation controller).

Thanks!

Cleverson

like image 714
Cleversou Avatar asked Dec 17 '14 12:12

Cleversou


People also ask

Why can't I use my Iphone upside down?

Swipe down from the top-right corner of your screen to open Control Center. Tap the Portrait Orientation Lock button to make sure that it's off.

How do I change device orientation in Xcode?

Open project in Xcode ( ios/Runner. xcworkspace ), choose Runner in the project navigator, select Target Runner and on Tab General in section Deployment Info we can setup Device Orientation : Setup a device orientation in Xcode.


3 Answers

Well, I have figured out the purpose of the the options on project configuration... Within the options you're saying "my app support these orientations" and not "my app must use these four options"... So, on iPhone you must explicity say that a particular ViewController support all orientations (the upsidedown doesn't make parte of the default orientations, for a reason that I dont know)... The code should be like this for supporting all orientations:

override func supportedInterfaceOrientations() -> Int{
    return Int(UIInterfaceOrientationMask.All.rawValue)
}
like image 139
Cleversou Avatar answered Nov 15 '22 11:11

Cleversou


With Swift 2.1, you can simplify @Cleversou’s answer to:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask
{
  return .All
}

With Swift 2.3

override var supportedInterfaceOrientations : UIInterfaceOrientationMask {
  return .all
}
like image 21
Aral Balkan Avatar answered Nov 15 '22 11:11

Aral Balkan


If you are running inside of a navigation controller or tab bar controller, you will need to do the same override in your subclass or override all instances with an extension:

extension UINavigationController {
  override public func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    return .All
  }
}

extension UITabBarController {
  override public func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    return .All
  }
}

Edit: as of Swift 3.0 / iOS 9 (and possibly earlier) this would be:

extension UINavigationController {
    override open var supportedInterfaceOrientations : UIInterfaceOrientationMask     {
        return .all
    }
}

extension UITabBarController {
    override open var supportedInterfaceOrientations : UIInterfaceOrientationMask     {
        return .all
    }
}
like image 37
siraustin Avatar answered Nov 15 '22 12:11

siraustin