UIViewController выборочная авторотация с классами размера - PullRequest
0 голосов
/ 18 ноября 2018

Новые классы размера, основанные на автоповороте, - боль, если вам нужно нестандартное поведение. Вот мои требования и поток:

  • View Controller 1 (VC1) представляет модально View Controller 2 (VC2)
  • VC1 поддерживает только альбомную, книжную или обе ориентации в зависимости от пользовательских настроек (достигается с помощью supportedInterfaceOrientations). Для этого примера мы предполагаем, что он заблокирован в альбомной ориентации,

  • VC 2 поддерживает как альбомную, так и портретную ориентацию

Я использую классы размера, и в View Controller 1 я проверяю statusBarOrientation в viewWillTransition (для размера ...) для настройки расположения элементов интерфейса и других настроек.

   override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

    let orientation = UIApplication.shared.statusBarOrientation

    NSLog("View will transition to \(size), \(orientation.rawValue)")
    super.viewWillTransition(to: size, with: coordinator)


    coordinator.animate(alongsideTransition: { [unowned self] (_) in
    ....
    }
}

Это работает, за исключением случаев, когда VC 2 представлен и устройство повернуто. VC 1 все испортилось, когда VC 2 отклонен. Чтобы быть уверенным, я хотел бы обновить макет View Controller 1, когда он появится. Как я могу это сделать? Я попытался UIViewController.attemptRotationToDeviceOrientation (), но он не заставляет вызывать методы автоповорота снова.

EDIT: Как видно, в VC1 я проверяю statusBarOrientation, чтобы определить ориентацию интерфейса. Это создает проблему, потому что statusBarOrientation изменяется на портрет, когда VC2 поворачивается в портретный режим. И viewWillTransition к размеру вызывается на VC1 в то же время, когда я вынуждаю макет в портретный режим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...