ビュー コントローラーが 4 つしかない小さなアプリがあり、ユーザーが横向きに/から横向きに移行するときにレイアウトを変更したいと考えています。ランドスケープをチェックする方法を見つけましたが、関数は1つのviewControllerクラスに存在し、viewWillTransitionが発生したときに他のviewControllerにアクションを実行させる方法が明確ではありません. そのオーバーライド関数のバージョンを各View Controllerクラスに配置して、それに固有のことを行う必要がありますか? セグエの後に両方のクラスにオーバーライドを入れようとしたとき、両方が起動し、「正しい方法」のように感じなかったので、専門家に尋ねたいと思いました。
アプリの起動時に以下のコードを使用して、ランドスケープにあるかどうかのグローバル 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
}
}
すべての