web-dev-qa-db-ja.com

新しいiOS 13モーダルプレゼンテーション:プレゼンテーションコントローラーが下に移動しない

IOS 13でUIViewControllersをモーダルで表示すると、奇妙な動作になります。iOS13全体で見た新しいプレゼンテーションスタイルは、次のようになります。

現在のビューコントローラは、現在のビューコントローラの後ろに表示されます。また、「スタック」を模倣するために下にシフトされます

The presenting view controller appears behind the presented view controller. It is also shifted down to mimic a "stack"

その間、私のアプリを介してビューコントローラーを提示するとき、私はこの効果を得続けます:

新しいビューコントローラを提示するときに、提示するビューコントローラがまったく移動しない

The presenting view controller doesn't move at all when presenting a new view controller

このコードを使用して、このビューコントローラを表示します。

let controller = storyboard?.instantiateViewController(withIdentifier: "tutorial") as! TutorialController
controller.modalPresentationStyle = .pageSheet
controller.modalTransitionStyle = .coverVertical
present(controller, animated: true, completion: nil)

これが私の質問です:これがなぜ起こっているのか、そして通常のiOS 13スタイルでビューコントローラを表示する方法があるかどうか疑問に思っています(戻るビューコントローラーを示す)。

前もって感謝します!

11
CentrumGuy

問題は私のビューコントローラーの階層にあることがわかりました。表示するビューコントローラーをアプリのルートビューコントローラーにすることで修正できました。まず、バックグラウンドコントローラーをルートビューコントローラーとして設定します

window.rootViewController = self

そして私の以前のコードを使用して

let controller = storyboard?.instantiateViewController(withIdentifier: "tutorial") as! TutorialController
controller.modalPresentationStyle = .pageSheet
controller.modalTransitionStyle = .coverVertical
present(controller, animated: true, completion: nil)

ビューコントローラーを紹介しました。手伝ってくれた皆さん、ありがとう!

2
CentrumGuy

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)

ストーリーボードから:

enter image description here

それでおしまい。ルートコントローラーやウィンドウで遊ぶ必要はまったくありません。

参考として、 この記事 にアクセスしてください。

0
iBug

インスペクタツールバーで変更できます。それを達成するには:Inspector Tollbarの5番目のセクションに移動し、次にPresentationフィールドをFull Screenに変更します。

0

これは、設定する必要がある唯一のプロパティでなければなりません

presentedViewController.modalPresentationStyle = .automatic

詳細 https://developer.Apple.com/videos/play/wwdc2019/224/

0
glotcha