IOS 13でUIViewControllersをモーダルで表示すると、奇妙な動作になります。iOS13全体で見た新しいプレゼンテーションスタイルは、次のようになります。
現在のビューコントローラは、現在のビューコントローラの後ろに表示されます。また、「スタック」を模倣するために下にシフトされます
その間、私のアプリを介してビューコントローラーを提示するとき、私はこの効果を得続けます:
新しいビューコントローラを提示するときに、提示するビューコントローラがまったく移動しない
このコードを使用して、このビューコントローラを表示します。
let controller = storyboard?.instantiateViewController(withIdentifier: "tutorial") as! TutorialController
controller.modalPresentationStyle = .pageSheet
controller.modalTransitionStyle = .coverVertical
present(controller, animated: true, completion: nil)
これが私の質問です:これがなぜ起こっているのか、そして通常のiOS 13スタイルでビューコントローラを表示する方法があるかどうか疑問に思っています(戻るビューコントローラーを示す)。
前もって感謝します!
問題は私のビューコントローラーの階層にあることがわかりました。表示するビューコントローラーをアプリのルートビューコントローラーにすることで修正できました。まず、バックグラウンドコントローラーをルートビューコントローラーとして設定します
window.rootViewController = self
そして私の以前のコードを使用して
let controller = storyboard?.instantiateViewController(withIdentifier: "tutorial") as! TutorialController
controller.modalPresentationStyle = .pageSheet
controller.modalTransitionStyle = .coverVertical
present(controller, animated: true, completion: nil)
ビューコントローラーを紹介しました。手伝ってくれた皆さん、ありがとう!
UINavigationControllerがない場合はvc.modalPresentationStyle = .fullScreen
を使用して問題を解決できると思います。それ以外の場合は、これらのコードを次のように使用できます。
let navigationController = UINavigationController(rootViewController: vc)
navigationController.modalPresentationStyle = .fullScreen
present(vc, animated: true)
iOS 13では、これは新しい機能であり、Appleは、ビューコントローラのデフォルトのプレゼンテーションスタイルをiOS 12のフルスクリーンからモーダルシートに変更しました。
プログラム的に:
let vc = UIViewController()
vc.modalPresentationStyle = .fullScreen //or .overFullScreen for transparency
self.present(vc, animated: true, completion: nil)
ストーリーボードから:
それでおしまい。ルートコントローラーやウィンドウで遊ぶ必要はまったくありません。
参考として、 この記事 にアクセスしてください。
インスペクタツールバーで変更できます。それを達成するには:Inspector Tollbarの5番目のセクションに移動し、次にPresentationフィールドをFull Screenに変更します。
これは、設定する必要がある唯一のプロパティでなければなりません
presentedViewController.modalPresentationStyle = .automatic