Предотвратить авторотирование для одного контроллера ios7?

Мое приложение может авторотировать, но мне нужно, чтобы одно из просмотров отображалось только в портретном режиме и не знаю, как этого добиться. Я пробовал это (между прочим), но рассматриваемый вид все еще вращается:

-(BOOL)shouldAutorotate
{            
    return NO;
}

 - (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

Ответ 1

В этом решении объясняется, как управлять ориентацией на отдельных контроллерах представлений, если они управляются навигационным контроллером.

В Xcode 5 создайте новый файл типа "Objective-C category", установите его "Category" в "rotation" и выберите "UINavigationController" как "Category on".

В проекте появится новая пара файлов, имеющая следующие имена: UINavigationController + rotation.h UINavigationController + rotation.m

В файле .m напишите следующий код:

- (BOOL) shouldAutorotate
{
    return [[self topViewController] shouldAutorotate];
}

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

Таким образом, контроллер навигации позволит текущему контроллеру верхнего уровня определить политику ориентации.

Затем в каждом контроллере определенного вида, который управляется навигационным контроллером, вы можете переопределить два связанных с ориентацией методов.

Например, если конкретный контроллер просмотра должен отображаться только в портретной ориентации:

- (BOOL) shouldAutorotate
{            
    return NO;
}

 - (NSUInteger) supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

Убедитесь, что желаемая ориентация является одной из тех, которые указаны в информации о развертывании проекта. Надеюсь, что это достаточно подробно и может помочь.

Ответ 2

supportedInterfaceOrientations будет работать, если вы представляете свой контроллер представлений в качестве модального контроллера. Он не будет работать, если вы представите его как часть стека контроллера навигации. Если вы хотите, чтобы ваше представление было представлено модально, но внутри навигационного контроллера (например, для элементов навигации), я решил сделать подкласс UINavigationController и переопределить методы supportedInterfaceOrientations в моем подклассе.