iPad Pro iPadOS 15.0.2 Изменения ориентации Не работает
Мое приложение поддерживает iPhone и масштабируется с iPad(не поддерживает полноэкранный режим на iPad).
Мы программно меняем ориентацию на альбомную, когда эта функция работает нормально на iphone (все версии ios). Но функция поворота экрана не работает на iPad Pro с iPadOS 15.0 и более поздних версий. Я отлаживаю его, состояние вращения установлено на клавишу «ориентация», но функция UIViewController.attemptRotationToDeviceOrientation(), похоже, не отражает состояние для приложения.
Ниже приведен код для поворота экрана. Не могли бы вы помочь проверить это?
Окружающая среда:
Xcode: 12.2(12B45b), Version 13.0 (13A233)
Simulator: iPad Pro(12.9-inch) OS15.0
Device: iPad Pro 11inch (gen2) OS 15.0.2
Appdelegate:
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return ScreenOrientationManager.shared.currentOrientation
}
RotationManager класс:
class ScreenOrientationManager: NSObject {
static let shared: ScreenOrientationManager = ScreenOrientationManager()
var currentOrientation: UIInterfaceOrientationMask = .portrait
@discardableResult
func rotateScreen() {
if self.currentOrientation == .portrait {
self.currentOrientation = .landscape
UIDevice.current.setValue(UIInterfaceOrientation.landscapeRight.rawValue, forKey: "orientation")
} else {
self.currentOrientation = .portrait
UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")
}
UIViewController.attemptRotationToDeviceOrientation() // *→ Not working on iPadOS15*
}
Настройка проекта
<key>UIRequiresFullScreen</key>
<false/>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
2 ответа
Чтобы исправить это, вы можете установить для viewcontroller's presentationStyle полноэкранный режим ..!!
Вы молодцы, это хороший вопрос, спасибо вам от имени многих людей.
Я могу конкретно объяснить ваш случай следующим образом: Проблема в том, что одно из различий между iPadOS и iOS заключается в ядре системы iPadOS, разработанной Apple, поддерживающей такие функции, как Slide Over и Split View, которые позволяют использовать несколько разных приложений. одновременно. Это означает, что общепринятый способ управления окнами использует несколько окон с одной и той же основной деятельностью на экране iPadOS.
UIViewController.attemptRotationToDeviceOrientation() все еще работает, но вы ошибаетесь, он работает в окне с наивысшим уровнем назначения (iOS, наоборот, не поддерживается для обеспечения пользовательского дизайна), это окно не является окном контейнера домашних экранов вашего приложения.
Чтобы решить вашу проблему, вам нужно проверить, использует ли ваш проект другое окно с более высоким рычагом (проверьте: window.windowLevel)? вам нужно удалить или установить свойство скрывать окна с верхних этажей. Например: window.isHidden = false.
Ваше здоровье.