Принуждение UIInterfaceOrientation изменяется на iPhone

Я - strugging с получением приложения для iPhone, которое требует примерно, чтобы каждое нажатие или поп в Военно-морской Стопке Контроллера изменили ориентацию.

В основном первое представление является портретом, вторая среда третий портрет снова (Да, я знаю, что это - меньше, чем идеал, но это - дизайн, и я должен реализовать его).

Я был через различный совет относительно здесь....
Как я обнаруживаю вращение на iPhone без самовращающегося устройства?
Вызовите портретную ориентацию при продвижении нового представления к UINavigationViewController
Существует ли зарегистрированный способ установить ориентацию iPhone?
Но без общего успеха.

Установка для соединения против 3.1.2 моих чтений связанных статей выше, кажется, указывает на это, если мое представление портрета продвигает представление с

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return ((interfaceOrientation == UIInterfaceOrientationLandscapeRight) );
}
Затем затем то представление должно казаться повернутым для озеленения. То, что происходит, это появляется в своей "поврежденной" форме портрета, затем вращается правильно, поскольку устройство превращено.

Если я выталкиваю контроллер назад к моему представлению портрета (который имеет соответствующий shouldAutoRotate...), затем, это остается в поврежденном альбомном представлении, пока устройство не возвращается к портретной ориентации.

Я также попытался удалить все сообщения shouldautorotate и вместо этого вызвать вращение путем преобразования представления. Этот вид работ, и я выяснил, что путем перемещения строки состояния (который на самом деле скрыт в моем приложении), [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight; клавиатура появится с корректной ориентацией при желании.

Проблема с этим подходом состоит в том, что преобразование строки состояния является странным и ужасным, когда у Вас нет строки состояния - тень нависает над страницей с каждым изменением.

Так. Что я пропускаю.

1) Я нахожусь неправильно в размышлении, что в 3.1.2 (или возможно ранее) shouldAutorotateToInterfaceOrientation должен обеспечить желаемую ориентацию просто путем продвижения контроллеров?

2) Есть ли другой способ заставить клавиатуры появляться в корректной ориентации.

3) Недокументированные вызовы API способ пойти (нет!)

8
задан Community 23 May 2017 в 12:07
поделиться

1 ответ

Вы не должны использовать [UIViewController shouldAutorotateToInterfaceOrientation:] для изменения ориентации; он нужен только для того, чтобы система знала, разрешено ли автоматическое вращение. Вы все равно должны обновить его, чтобы указать разрешенную ориентацию.

Если вы хотите изменить ориентацию при отображении определенного вида, вы должны вызвать [UIApplication setStatusBarOrientation: animated:] внутри вашего [UIViewController viewWillAppear:] метод переопределения для каждого контроллеров представления, которые заставляют определенную ориентацию. Это вызовет изменение, когда представление помещается в стек и когда оно выталкивается из него. Убедитесь, что вы вызываете super в своем методе переопределения.

Это также подходящее место для изменения способа отображения строки состояния, если вы этим занимаетесь.

4
ответ дан 6 December 2019 в 00:05
поделиться