Запретить авторотирование для одного контроллера вида?
Мое приложение может авторотировать, но мне нужно, чтобы одно из просмотров отображалось только в портретном режиме и не знало, как добиться этого.
Я пробовал это (между прочим), но рассматриваемое представление все еще вращается:
// ViewController.m
-(BOOL)shouldAutorotate
{
return NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
Может кто-нибудь любезно указать, что я делаю неправильно? Спасибо.
-edit-
Это для iOS 6.1
Ответы
Ответ 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
}
}