У меня есть приложение для iPhone с UIViewController
в качестве первого контроллера. В нем у меня есть стандартные методы, которые заставляют его быть ландшафтом (см. Ниже).Ориентация Ошибка - Застрял в ландшафте
У меня также есть второе представление, которое я показываю как модальное в viewWillAppear - оно предназначено как экран заставки, когда я вытаскиваю содержимое из сети.
Проблема возникает, когда я физически поворачиваю свое устройство в ландшафтном режиме и запускаю приложение. Модальные шоу (в портрете), но через несколько секунд, когда его отбрасывают, основной вид отображается в ландшафте.
С другой стороны, если я прокомментирую код модальности и запустил приложение в ландшафте, основной вид отображается в портрете так, как должен.
Любые предложения о том, как сохранить основной вид в портретном режиме при запуске приложения из ландшафта?
- (void)viewWillAppear:(BOOL)animated {
// Show the loading splash screen until the webview has completed
[self performSegueWithIdentifier:@"sgImageModal" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"sgImageModal"]) {
splashScreen.modalPresentationStyle = UIModalPresentationFullScreen;
}
}
- (BOOL)shouldAutorotate {
return NO;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
[self viewWillAppear:animated];
}
- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskPortrait;
}
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}
Update 1
В соответствии с предложениями, я переместил логику, чтобы отобразить модальный в viewDidAppear и viewDidLoad. Я также изменил shouldAutorotate, чтобы вернуть ДА. Не было и желаемого эффекта.
Отчасти это верно. Фактически у вас есть контроллер представления, другой из 'viewDidLoad'. В этом случае методы 'viewWill | DidAppear' первого не вызывают до тех пор, пока второй не будет уволен. – rmaddy
Вы можете, но это действительно не рекомендуется и может дать непредсказуемые результаты. Во время выполнения метод 'viewDidLoad' может быть вызван снова, например, если среда выполнения должна выпустить/перезагрузить контроллер в случае предупреждения о памяти. В этом случае ваш контроллер просмотра будет представлен снова, что не идеально! –
Быстрое изменение моего кода, перемещающего это в viewDidAppear, по-прежнему вызывает отображение основного вида в ландшафте. – bugfixr