Подтвердить что ты не робот

Запретить авторотирование для одного контроллера вида?

Мое приложение может авторотировать, но мне нужно, чтобы одно из просмотров отображалось только в портретном режиме и не знало, как добиться этого.

Я пробовал это (между прочим), но рассматриваемое представление все еще вращается:

//  ViewController.m

-(BOOL)shouldAutorotate
{            
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

Может кто-нибудь любезно указать, что я делаю неправильно? Спасибо.

-edit-

Это для iOS 6.1

4b9b3361

Ответ 1

Когда задействуется UINavigationController, создайте категорию в UINavigationController и override supportedInterfaceOrientations.

 #import "UINavigationController+Orientation.h"

 @implementation UINavigationController (Orientation)

-(NSUInteger)supportedInterfaceOrientations
{
   return [self.topViewController supportedInterfaceOrientations];
}

-(BOOL)shouldAutorotate
 {
    return YES;
 }

@end  

Теперь контейнеры iOS (например, UINavigationController) не проконсультируют своих детей, чтобы определить, должны ли они авторотировать.

Как создать категорию
1. Добавьте новый файл (Objective c-category под cocoa touch)
2. Category: ориентация на UINavigationController
3. Добавьте приведенный выше код в UINavigationController+Orientation.m

Ответ 2

Swift 3 версия принятого ответа:

extension UINavigationController {

    open override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        // Change `.portrait` to whatever your default is throughout your app
        return topViewController?.supportedInterfaceOrientations ?? .portrait
    }

    open override var shouldAutorotate: Bool {
        return true
    }
}