Мое приложение в основном портретное, однако есть один вид, который требует альбомной ориентации.
Мои представления содержатся в UINavigationController, который (по-видимому) является причиной этой проблемы.
Все контроллеры UIView, кроме одного, имеют это:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
Контроллер UIViewController, который требует Landscape, имеет следующее:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
Теперь, когда пользователь достигает ландшафта UIViewController, он отображается в портретной ориентации. Затем пользователь может повернуть свой телефон, и он будет отображаться в альбомной ориентации, как я хочу (блокировка в альбомной ориентации). Затем пользователь переходит к портретному UIViewController, и происходит то же самое: он запускается в альбомной ориентации, затем он поворачивает свой телефон, и он снова становится портретным (и привязывается к портретному).
Кажется, что блокировка ориентации разрешена между UIViewControllers, однако автоматическое вращение / изменение ориентации программным способом каким-то образом блокируется.
Как заставить телефон обновиться до правильной ориентации?
Существует временное решение: я могу определить ориентацию устройства и показать сообщение с просьбой повернуть устройство, если оно неверно, однако это не оптимально.