У меня небольшое приложение только с 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
}
}
Все из