iosswiftautorotate

overriding shouldAutorotate not working in Swift 3


I'm trying to prevent rotation on one UIViewController and I can't achieve that.

I'm doing something like this:

open override var shouldAutorotate: Bool {
    get {
        return false
    }
}

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    get {
        return .portrait
    }
}

And the UIViewControler stills rotating. The UIViewController is inside a UINavigationController opened modally.

I have looked a lot of questions from here and none answers works for me.

In Swift 2 I used to override shouldAutorotate but in Swift 3 that function doesn't exist anymore.

How can I do that in Swift 3 what I used to do in Swift 2?


Solution

  • I don't know why is a vote to close the question if I can reproduce this behavior a lots of times. The UIViewController is inside a UINavigationController opened modally.

    This is what I did to solve the problem.

    I create this class and I set to the UINavigationController that containt the UIViewController that I want to prevent to rotate

    class NavigationController: UINavigationController { 
    
        override var shouldAutorotate: Bool {
            return false
        }
    
        override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
            return .portrait
        }
    
    }
    

    And thats it, it works for me