Автоматический поворот UINavigationController в альбомную ориентацию не обновляет фрейм UIView - PullRequest
3 голосов
/ 23 апреля 2009

Я работаю над приложением, которое работает полностью в ландшафтном режиме (UIStatusBarHidden = YES и UIInterfaceOrientation = UIInterfaceOrientationLandscapeRight). Я использую NavigationController, с моей настройкой rootViewController (MainViewController), например:

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

В моем MainViewController я загружаю представление так:

- (void)loadView {
  CGRect frame = [[UIScreen mainScreen] applicationFrame]; // This returns a portrait frame
  MainView *view = [[MainView alloc] initWithFrame:frame];
  self.view = view;
  [view release];
}

Затем в MainView я загружаю такие подпредставления, как это:

- (id)initWithFrame:(CGRect)frame {
  if (self = [super initWithFrame:frame]) {
    self.pdfView = [[PDFView alloc] initWithFrame:frame];
    [self addSubview:pdfView];
  }
   returnself;
}

Моя проблема заключается в том, что MainView правильно отображает в альбомном режиме (несмотря на то, что кадр, переданный в [MainView initWithFrame:] в портретном режиме), в то время как дочерний PDFView отображает в портретную рамку. Я также экспериментировал с применением преобразований в моих реализациях [UIView initWithFrame:] следующим образом:

view.center = CGPointMake(view.frame.size.height/2.0, view.frame.size.width/2.0);
view.transform = CGAffineTransformRotate(view.transform, (M_PI/2.0));

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

CGRectMake(0.0, 0.0, 480.0, 320.0)

Но очевидно, что выполнять ручные настройки, как это не идеально.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 06 июля 2009

Я не знаю, поможет ли это в вашем случае, но убедитесь, что все ваши представления и элементы управления поддерживают автоматический поворот. UINavigationController не имеет, как и UITabBarController. Контроллер панели вкладок перестанет поддерживать его, если какое-либо из его дочерних представлений не поддерживает автоматический поворот. Я должен был создать свой собственный UINavigationController и заставить его наследовать от UINavigationController, а затем реализовать автоответ. Поскольку вы делаете свое приложение полностью в ландшафте, я не знаю, помогает ли это или нет, но это может помочь вам начать путь к вашему решению.

0 голосов
/ 23 октября 2010

Потому что MainScreen всегда портрет . см. Высота и ширина на iPhone (/ iPad)

0 голосов
/ 23 июня 2010

Я столкнулся с похожей проблемой с MapView. По сути, вы должны убедиться, что все ваши подпредставления реализуют:

view.autoresizingMask = UIViewAutoresizingF FlexibleWidth | UIViewAutoresizingFlexibleHeight;

...