Глюк вращения экрана на iPadOS 13 - PullRequest
1 голос
/ 23 октября 2019

Я имел дело с глюком интерфейса на iPadOS 13.1.3, который связан с ориентацией устройства. Есть ли какое-либо решение или обходной путь для этого?


Проблема

Описание

Давайте создадим экран A, который отображает модально экран B. Экран Aзаблокирован только для портрета, и экран B поддерживает все ориентации. Если отображается экран A, устройство поворачивается в горизонтальной ориентации, а экран B собирается отображаться, размер экрана A сначала изменяется неправильно, что приводит к странному сбою.

Изображения

Левые изображения взяты на iPadOS 13.1.3, который производит сбой пользовательского интерфейса. Изображение справа записано на iPad с установленной iOS 12.4.1, где верный макет. Все прикрепленные изображения являются частью проекта github, связанного ниже.

image image

Project

Please, feel free to have a closer look on the issue by using это хранилище.

Спасибо.


Редактировать:

На iPadOS 13.2 сбой больше не возникает.

1 Ответ

0 голосов
/ 24 октября 2019

Я работал так:

  • Удалите вашу реализацию func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?). Давайте позволим контроллерам представления справиться с этим.

  • В VC1:

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        .portrait
    }
    

    Также удалите «хакерское решение».

  • В VC2:

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        .all
    }
    override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
        .portrait
    }
    

Итак, мы получаем, что VC2 изначально появляется в портретной ориентации, но затем может поворачиваться.

Если вы хотите, чтобы VC2 сразу же появлялся в альбомной ориентации, добавьте следующее:

var appeared = false
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    appeared = true
    UIViewController.attemptRotationToDeviceOrientation()
}
...