При изменении подпредставлений UIWindow ориентация не устанавливается - PullRequest
4 голосов
/ 15 сентября 2010

Если вид добавлен в окно, ориентация устанавливается как книжная, даже если устройство находится в альбомной ориентации.Если представление добавляется в делегат приложения, application: didFinishLaunchingWithOptions: method, то оно работает правильно.Но если представление добавляется позже, это не так.

В качестве примера, у меня есть процедура для переключения видов.Простейшая форма:

- (void)switchToNewViewController:(UIViewController *)newViewController { 
 if ([[window subviews]count]!=0) {
  [[[window subviews]objectAtIndex:0] removeFromSuperview];
 }
 [window addSubview:newViewController.view];
}

Если это вызвано из didFinishLaunching, ориентация верна.Если это не так, ориентация является портретной.

Простейший случай в рамках didFinishLaunching У меня есть следующие две строки

// The following line works
[self switchToNewViewController:fullScreenViewController];

// The following line which delays the method call until later results
// in incorrect orientation 
[self performSelector:@selector(switchToNewViewController:) withObject:fullScreenViewController afterDelay:0.1];

Есть ли способ заставить вид иметь правильную ориентацию?

1 Ответ

1 голос
/ 26 января 2011

Убедитесь, что ваша shouldAutorotateToInterfaceOrientation в контроллерах представления имеет правильную логику

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return YES; //this supports all orientations
}

Если вы связываете вещи в InterfaceBuilder, также убедитесь, что и представление, и контроллер представления настроены на начальную ориентацию, которая вам нравится.(В правом верхнем углу есть небольшая стрелка для поворота представлений и контроллеров представлений)

Если у вас все еще есть проблемы, используете ли вы UINavigationController или подобное?UINavigationController должен быть разделен на подклассы и должен быть реализован долженAutorotateToInterfaceOrientation, если вы хотите поддерживать что-то, кроме portait.

...