0

У меня есть другая проблема ориентации. Но это очень сложно. My RootViewController - обычный навигационный контроллер.Ориентационный пейзаж -> Портрет не работает

self.window.rootViewController = _naviController; 

, у которого есть другой ViewController внутри, позволяет называть его VC1. У VC1 есть несколько кнопок и этикеток. Это как обзор с папками.

Если я нажимаю кнопку, я пришел к следующему ViewController с 3 ViewController (Страница) и еще кучу кнопок (как внутри папки, глядя на фотографии/миниатюр внутри):

Archiv *archiv = [[Archiv alloc] init]; 
[self.navigationController pushViewController:archiv animated:YES]; 
[archiv release]; 

в loadView:

firstPage = [[Page alloc] initViewWithFrame:CGRectMake(0, 0, 768, 960)]; 
[firstPage setRootViewController:self]; 
secondPage = [[Page alloc] initViewWithFrame:CGRectMake(0, -960, 768, 960)]; 
[secondPage setRootViewController:self]; 
thirdPage = [[Page alloc] initViewWithFrame:CGRectMake(0, 960, 768, 960)]; 
[thirdPage setRootViewController:self]; 

Если теперь я снова нажмите на кнопку активной страницы нажмите мой третий ViewController (изображение с изменением размеров, увлекая ...):

Picture *pic = [[Picture alloc] initWithPicURLString:urlString]; 
[rootViewController.navigationController pushViewController:pic animated:YES]; 
[pic release]; 

С BackButton навигационного контроллера я всегда могу вернуться к предыдущему виду.

Некоторой подробной информации:

  • Каждого ViewController поддерживает все ориентации
  • Каждого ViewController реализует - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation с return YES;
  • Каждого ViewControler называет [super init] в их инициализации-Methode
  • Я уже прочитал Apple's Q&A: Why won't my UIViewController rotate with the device

Теперь сложная проблема:

Если я перейти с 2-го ВК 3 ВК, изменить ориентацию там с портретной на ландшафтную и нажмите BackButton все работает (shouldAutorotateToInterfaceOrientation звонит, размер кадра и происхождение изменения ...). НО если я сделать это наоборот, я нахожусь в режиме, переключение с 2-го на 3-е VC VC пейзаж, вращать к портрету и вернуться к 2-й ВК с BackButton, тем и controllerBar СТАТУС находятся верхний, но shouldAutorotateToInterfaceOrientationне был вызван.

Пожалуйста, помогите мне. $ h @ rky

ответ

1

Попробуйте, это работает для меня:

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self shouldAutorotateToInterfaceOrientation:[[UIApplication sharedApplication] statusBarOrientation] ]; 
} 
+0

Да, эта работа тоже, но это не отвечает на вопрос ПОЧЕМУ вид не звонит, когда я возвращаюсь в портретной ориентации. Во всяком случае, я приму ответ, если nodoby скажет мне, почему это происходит на следующей неделе. – Sharky

+0

Как я и обещал приём и верхнюю часть, потому что разрешение умнее моего пути xD. $ Ч @ скалистый – Sharky

0

Сегодня я понял, что решил проблему, не зная причину. В моем третьем VC я только что создал указатель на 2-й вид и сам вызвал shouldAutorotateToInterfaceOrientation.

Но вопрос все тот же: почему не shouldAutorotateToInterfaceOrientation не звонит в описанной ситуации?

С уважением.$ Ч @ скалистый

0

shouldAutorotateToInterfaceOrientation только вызывается, когда пользователь поворачивать, так что, когда вы от пейзажа до портрета или иным образом просматривать контроллер еще пейзаж, так это решить проблему, вы должны взломать код, это значит, когда вы нажимаете для просмотра контроллера от пейзажа до портрета presentViewController Например:

ListCurrentViewController *list = [self.storyboard 
    instantiateViewControllerWithIdentifier:@"ListCurrentViewController"]; 
       [self.navigationController presentViewController:list animated:NO completion:Nil]; 
       [list dismissViewControllerAnimated:NO completion:Nil]; 
       [self.navigationController pushViewController:list animated:YES]; 

в функции ListViewController называется:

(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation // iOS 6 autorotation fix { return UIInterfaceOrientationPortrait; } 

и вы должны создать категорию для UINavigationController

(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { 
    return [self.visibleViewController preferredInterfaceOrientationForPresentation]; 
} 

Я надеюсь, что это поможет решить вам.

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