Предупреждение о видах в портрете, iPad в ландшафте и не может вращаться к чему-либо, кроме «другого» ландшафта (180 градусов)
-
26-09-2019 - |
Вопрос
Обновлять: Решено. См. Исправление внизу.
В моем приложении iPad, который поддерживает все ориентации, если приложение загружено в ландшафт, странные вещи случаются:
- Предупреждающие взгляды появляются в портрете, даже если остальные в ландшафте
- Вращающийся iPad из ландшафта до портрета не вызывает вращение (и не запускает ни один из методов в стилях).
- Вращавшись от iPad 180 градусов (к «другому ландшафту») делает вращение запуска, а после этого iPad ведет себя как обычно (то есть правильно вращается к портрету и ландшафту, когда вращается).
Экран просмотра предупреждения ниже. Странно, странно. Любые идеи, почему это может происходить? Это происходит только при нагрузке в ландшафт - загрузка в портрете, а затем вращается к ландшафту, работает просто хорошо.
Решение: Эта проблема произошла, потому что я добавил UIViewController (модально) сверху главный контроллер представления, как только приложение завершило загрузку (более конкретно, в приложении viewDidAppear:
метод).
iOS отправляет ряд (4) shouldAutorotateToInterfaceOrientation:
Вызывает текущий / основной контроллер просмотра после того, как все запущено, чтобы выяснить, какие ориентации в настоящее время поддерживаются. Когда я добавил другой VC так скоро, это произошло в середине вышеупомянутых вызовов. Таким образом, у меня только один или два звонка (для «портрета», потому что он начинается с портрета).
Затем контроллер главного просмотра был затем оставлен с поддержкой по умолчанию «NO» для ландшафтных ориентаций, но вновь добавленный контроллер просмотра (который также спрашивает о ориентациях), теперь счастливо отвечает да.
Если бы я удалил другой VC (который находится в ландшафте), я бы понял, что мой главный контроллер просмотра застрял в портрете. Поэтому у меня был вид портрета, на вершине которого был вид на пейзаж. Оповещения и такая прислушиваясь к ориентации первых, отсюда и катастрофические результаты выше.
Кроме того, если я попытался повернуть на портрет, я не мог, потому что контроллер главного зрения уже был в портрете. Вращающийся к ландшафту также был невозможен, потому что другой контроллер просмотра уже находится в ландшафте. Только когда я сделал «ландшафт, но это другое» вращение, оба контроллера просмотра договорились, что требуется вращение, и, таким образом, устройство вращается.
Исправление в моем случае было просто поместить создание другого контроллера в небольшую задержку. с использованием performSelector:withObject:afterDelay.
- 0, казалось, работал, но я просто положил его в 1, чтобы быть уверенным. Это выглядит немного странно, с главным VC появляются, а затем другой VC, но это лучше, чем выше.
Решение
Эта проблема произошла, потому что я добавил UIViewController (модально) сверху контроллера главного представления, как только приложение завершило загрузку (более конкретно, в App ViewDiDiDAppear: метод).
Смотрите выше пост для получения подробной информации о решении.
Другие советы
Используйте UialertController вместо UialertView. У меня та же проблема и сейчас исправлена.