2014-10-15 8 views
4

Я пытаюсь установить ориентацию для UIViewController и запретить все изменения ориентации на этом UIViewController. Важно отметить, что приложение позволяет использовать все ориентации, но на этом контроллере просмотра я хочу разрешить только портретную ориентацию.Установить ориентацию на UIViewController

Я работаю над iOS 8, приложение работает с iOS 6 и выше. Описанное поведение происходит в прошивке 7 и 8. Я не могу проверить его в IOS 6, так что я не уверен, если это происходит в прошивке 6.

я следующие методы реализованы:

- (BOOL)shouldAutorotate 
{ 
    return NO; // I've also tried returning YES - no success 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; // I've also tried UIInterfaceOrientationPortrait - no success 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationMaskPortrait; // Never called 
} 

У меня есть удалось установить ориентацию для контроллера вида, который представлен в виде модально, но я не представляю контроллер представления для этого проекта. Можно ли это сделать?

Как указать ориентацию для одного UIViewController, не влияя на ориентацию других UIViewControllers? Можно ли это сделать?

+0

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

+0

Является ли неправильное поведение в iOS 6, 7 и 8? Или просто 8? – ravron

+0

@Riley Я знаю наверняка это происходит в iOS 7 и 8. Я не могу протестировать iOS 6, поэтому я просто предполагаю, что это происходит и в iOS 6. – tentmaking

ответ

1

Предположив, что ваш контроллер представления встроен в контроллер навигации, вам нужно использовать пользовательский подкласс UINavigationController и добавить:

- (BOOL)shouldAutorotate; 
{ 
    BOOL shouldAutorotate; 
    if ([self.topViewController respondsToSelector:@selector(shouldAutorotate)]) 
    { 
     shouldAutorotate = [self.topViewController shouldAutorotate]; 
    } 
    else { 
     shouldAutorotate = [super shouldAutorotate]; 
     } 
     return shouldAutorotate; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    NSUInteger supportedOrientations; 
    if ([[self topViewController] respondsToSelector:@selector(supportedInterfaceOrientations)]) { 
     supportedOrientations = [[self topViewController] supportedInterfaceOrientations]; 
    } 
    else { 
     supportedOrientations = [super supportedInterfaceOrientations]; 
    } 
    return supportedOrientations; 
} 

в навигационном контроллере. Методы в вашем контроллере зрения просто прекрасны, поэтому оставьте их такими, какие они есть. Это работает в iOS 7-8 (не тестировалось в iOS6)

+0

Я использовал решение, очень похожее на это. Я только что создал UIForcedOrientationNavigationController и обернул свой контроллер представления с помощью спасибо. – tentmaking

+0

@eleven Рад, что это помогло :) – spassas

Смежные вопросы