1. ホーム
  2. ios

[解決済み] 提示されたビューコントローラを対話的に終了させないようにする

2022-04-24 09:42:39

質問

iOS 13 の新しいデザインを導入しています。 modalPresentationStyle .pageSheet (およびその兄弟である .formSheet ) を使って、モーダル表示のビューコントローラーを作成することができます。

...そして、提示されたビューコントローラを下にスライドさせることで、これらのシートを無効にすることができます。 (対話的解除) . 新しい機能であるPull-to-Dismissは非常に便利ですが、必ずしも望ましいとは限りません。

質問です。 インタラクティブディザスターをオフにするにはどうすればよいですか? - プレゼンテーションのスタイルはそのままにすることを念頭に置いてください。

解決方法は?

オプション1:

viewController.isModalInPresentation = true

(無効な対話型 .pageSheet はこのように動作します)。

  • iOS 13になってから。 UIViewController という新しいプロパティが含まれています。 isModalInPresentation に設定する必要があります。 true を使用すると、対話型解除を防ぐことができます。
  • ビューコントローラーの境界外のイベントは基本的に無視されます。自動スタイルだけでなく、以下のようなプレゼンテーションスタイルも使用している場合は、その点に注意してください。 .popover などがあります。
  • このプロパティは false をデフォルトで使用します。

から 公式ドキュメント : もし true UIKit はビューコントローラの境界外のイベントを無視し、画面上にあるビューコントローラを対話的に終了させないようにします。


オプション2:

func presentationControllerShouldDismiss(_ presentationController: UIPresentationController) -> Bool {
    return false
}

  • iOS 13から。 UIAdaptivePresentationControllerDelegate という新しいメソッドが含まれています。 presentationControllerShouldDismiss .
  • このメソッドは、提示されたビューコントローラがプログラムによって解除されない場合にのみ呼び出され、提示されたビューコントローラの isModalInPresentation プロパティに false .

ヒント presentationController の delegate を指定するのを忘れないようにしましょう.