Как обнаружить переход к ландшафту, когда у вас есть более одного viewcontroller - PullRequest
0 голосов
/ 04 мая 2019

У меня небольшое приложение только с 4 контроллерами представления, и я хочу изменить макет, когда пользователь переходит в / из ландшафта.Я выяснил, как проверить ландшафт, но функция живет в одном классе viewController, и мне не ясно, как заставить другие мои viewControllers действовать при срабатывании viewWillTransition.Должен ли я поместить версию этой функции переопределения в каждый класс контроллера представления, чтобы сделать что-то определенное для него?Когда я попытался поставить переопределение в обоих классах после перехода, они оба сработали и не почувствовали, что это «правильный способ сделать это», и поэтому я хотел спросить экспертов.

Использование приведенного ниже кода при запуске приложенияЯ устанавливаю глобальное значение bool для определения того, находится ли он в альбомной ориентации, и использую viewWillTransition для обнаружения изменений.

    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    print("Will Transition to size \(size) from super view size \(self.view.frame.size)")

    if (size.width > self.view.frame.size.width) {
        print("Landscape")
        inLandscapeMode = true
    } else {
        print("Portrait")
        inLandscapeMode = false
    }

    if (size.width != self.view.frame.size.width) {
        DispatchQueue.main.async {
            // DO SOMETHING LIKE reload a Table/Collection view to ensure no dequeued cells have old constraints... self.tableView.reloadData()
        }
    }
}
func setUpFormatting(){
    let size = UIScreen.main.bounds.size
    print("On App Start size \(size)")
    if size.width > size.height {
        print("Landscape")
        inLandscapeMode = true
    } else {
        print("Portrait")
        inLandscapeMode = false
    }
}

Все из

1 Ответ

0 голосов
/ 04 мая 2019

Вы можете получить ориентацию устройства в каждом контроллере вида и настроить виды по этому значению

if UIDevice.current.orientation == .portrait {

} else if UIDevice.current.orientation == .landscapeLeft || UIDevice.current.orientation == .landscapeRight {

}
...