En termes simples, je comptais sur le code suivant pour fournir l'orientation de l'application. Ceci est utilisé pour plusieurs raisons dans l'application:
Je suis juste chargé de la maintenance dans ce scénario et je n'ai pas la possibilité d'apporter des modifications importantes qui s'écartent de la logique de mise en page actuelle (et fonctionnant correctement) en place.
Pour l'instant, il s'appuie sur les éléments suivants pour capturer l'orientation de l'application:
var isLandscape: Bool {
return UIApplication.shared.statusBarOrientation.isLandscape
}
Cependant, avec la version Xcode 11 GM, je reçois l'avertissement de dépréciation suivant:
'statusBarOrientation' est obsolète dans iOS 13.0: utilisez plutôt la propriété interfaceOrientation de la scène de fenêtre.
Comment puis-je obtenir l'orientation de l'application via la barre d'état?
Objective C, iOS 13 et compatible avec les anciennes versions:
+ (BOOL)isLandscape
{
if (@available(iOS 13.0, *)) {
UIWindow *firstWindow = [[[UIApplication sharedApplication] windows] firstObject];
if (firstWindow == nil) { return NO; }
UIWindowScene *windowScene = firstWindow.windowScene;
if (windowScene == nil){ return NO; }
return UIInterfaceOrientationIsLandscape(windowScene.interfaceOrientation);
} else {
return (UIInterfaceOrientationIsLandscape(UIApplication.sharedApplication.statusBarOrientation));
}
}
J'ai ajouté ceci à une catégorie UIWindow
.
N'est-ce pas plus facile? (Testé avec Swift 5, iPadOS 13.4)
var isLandscape: Bool {
return UIDevice.current.orientation.isLandscape
}
ou essentiellement:
let o = UIDevice.current.orientation
if o == .landscapeLeft || o == .landscapeRight {
// Use interfaceOrientation
}
Deuxième variante:
if UIDevice.current.orientation.isLandscape {
// Use interfaceOrientation
}