簡単に言うと、アプリケーションの向きを提供するために次のコードに依存していました。これは、アプリケーション内のいくつかの理由で利用されます。
私はこのシナリオでメンテナンスを担当しているだけで、現在の(そして適切に機能している)レイアウトロジックから外れた大きな変更を加える機能はありません。
現在のところ、アプリケーションの向きを把握するために以下に依存しています。
var isLandscape: Bool {
return UIApplication.shared.statusBarOrientation.isLandscape
}
ただし、Xcode 11 GMバージョンでは、次の非推奨の警告が表示されます。
'statusBarOrientation'はiOS 13.0で廃止されました:代わりにウィンドウシーンのinterfaceOrientationプロパティを使用してください。
ステータスバーからアプリケーションの向きを取得するにはどうすればよいですか?
Objective C、iOS 13、および古いバージョンとの互換性:
+ (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));
}
}
これをUIWindow
カテゴリに追加しました。
これは簡単ではありませんか? (Swift 5、iPadOS 13.4でテスト済み)
var isLandscape: Bool {
return UIDevice.current.orientation.isLandscape
}
または基本的に:
let o = UIDevice.current.orientation
if o == .landscapeLeft || o == .landscapeRight {
// Use interfaceOrientation
}
2番目のバリエーション:
if UIDevice.current.orientation.isLandscape {
// Use interfaceOrientation
}