Ich muss überprüfen, ob mein Gerät die Ausrichtung in iOS 8+ geändert hat.iOS - Falsche UIScreen-Grenzen in ViewWillTransition für iPad
Mein Ansatz ist:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
let isLand = UIScreen.main.bounds.width > UIScreen.main.bounds.height
coordinator.animate(alongsideTransition: nil) { _ in
let isLand2 = UIScreen.main.bounds.width > UIScreen.main.bounds.height
print("\(isLand) -> \(isLand2)")
}
}
es funktioniert in iPhone in Ordnung, aber in iPad isLand
hat bereits den neuen Wert, der nach der Orientierung Abschluss sein sollte, so:
Portrait> Landschaft: true -> true
Landschaft> Porträt: false -> false
Laut der Dokumentation der Grenzen sollten sich mit der Ausrichtung ändern, also sollte es vorher/nachher Grenzen haben, oder?
UIScreen Haupt Grenzen:
Dieses Rechteck im aktuellen angegeben ist Raumkoordinate, die berücksichtigt keine Schnittstelle Drehungen in der Tat für die Vorrichtung. Daher kann sich der Wert dieser Eigenschaft ändern, wenn das Gerät zwischen Hoch- und Querformat wechselt.
Während es in Ordnung sowohl iPhone und iPad funktioniert, wenn ich die Grenzen des aktuellen Root-View-Controller wie folgt verwenden:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
let isLand = UIApplication.shared.keyWindow!.rootViewController!.view.bounds.width > UIApplication.shared.keyWindow!.rootViewController!.view.bounds.height
coordinator.animate(alongsideTransition: nil) { _ in
let isLand2 = UIApplication.shared.keyWindow!.rootViewController!.view.bounds.width > UIApplication.shared.keyWindow!.rootViewController!.view.bounds.height
print("\(isLand) -> \(isLand2)")
}
}
Portrait> Landschaft: false -> true
Landschaft> Porträt: true -> false
Wird die viewWillTransition() -Methode vor oder nach viewDidAppear aufgerufen? – luca