2016-07-20 2 views
1

У меня есть приложение, которое является только режимом portait. У меня есть только один контроллер просмотра, который мне нужно включить в ландшафтный режим (вид подписки на клиента), поэтому есть больше места для подписывания клиента.Force Landscape View только на одном UIViewController

Как заставить один ViewController появляться в ландшафтном режиме. Остаток на портрете?

Я попытался установить информации Общие развертывания для приложения к Портрет, Пейзаж Левый

enter image description here

И затем, используя этот код на Signature View

- (BOOL)shouldAutorotate { 
    return YES; 
} 

и возвращение NO на всех других контроллерах. Но это, похоже, не сработало.

Я также включил

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft); 
} 

Возможно ли это?

+0

Пробовал ли это http://stackoverflow.com/questions/26357162/how-to-force-view-controller-orientation-in-ios-8? –

+0

@TejaNandamuri Я попробовал это. Но вид пуст. Я использую раскадровки для ViewController с добавленным к нему программно созданным представлением. –

+0

Да, можно проверить это https://stackoverflow.com/questions/38308919/unable-to-force-uiviewcontroller-orientation/38308987#38308987 –

ответ

0

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

- (UIInterfaceOrientationMask)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 
+0

Это полуработало. Автоотключение, похоже, выбрасывается из окна, поскольку все элементы неправильно выложены. Кроме того, если я останусь в ландшафтном представлении, все остальные виды теперь застряли в ландшафте. –

+0

Не могли бы вы разместить изображение того, как выглядит ваш раскадровка, с ограничениями, которые вы используете, и тем, что оно выглядит неправильно в ландшафте. Таким образом, я использовал этот поток, и он работал, navigationcontrollerA -> viewcontrollerA -> segue -> navigationcontrollerB -> viewcontrollerB, в navB я установил 'supportedInterfaceOrientations' и 'shouldAutorotate', vcA появляется в портрете, vcB появляется в ландшафте, я должен использовать ' self.navigationController rejectViewControllerAnimated' для перехода с vcB в vcA. – JingJingTao

0

Попробуйте этот код в Signature View Controller

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationLandscapeLeft] forKey:@"orientation"]; 
} 

-(void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
    [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationPortrait] forKey:@"orientation"]; 
} 
0

Ниже приводится способ его работы для меня: -

-(UIInterfaceOrientationMask)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscapeLeft; 
} 

and 

- (BOOL)shouldAutorotate { 
    return NO; 
} 

Другой способ заключается в определении ориентации в prepareForSegue и фиксированной ориентация требуемого VC и set shouldAutorotate NO в этом VC.

Дайте мне знать, если упомянутый код не работает для вас.

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