Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
13
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

iOS13で追加されたモーダル画面が下スワイプ操作でdismissするのを無効にしたい

前提

モーダルとかdismissとかって何? って方は下記をご覧ください。
【iOS】画面遷移方法まとめ

事象

iOS13から、モーダル画面のデフォルトが変更になり、下スワイプ操作で閉じられるようになりました。

何が困る?

困るケースとして考えられるのは、たとえば下記です。

  • 戻ることを想定していない画面
  • 戻り先をアプリ内で指定しているような画面
  • 入力を完了させるまで戻らせない設計にしていた画面
    • 書いてみたものの、どんなケースだ?
    • 半強制で答えさせたいアンケート情報とか?
    • 「重要事項を確認しましたか?」→「はい」「いいえ」を絶対に押させる、とか?

UI/UX的に考えると、絶対に戻れない画面ってそもそもよくないですが、
要件によってはそうしたいケースも出てくるかとは思います。

回避方法は2つ

回避方法は2つあります。

  1. modalPresentationStyleに.fullScreenを指定する
  2. .isModalInPresentationをtrueにして下スワイプ閉じを封じる

1. modalPresentationStyleに.fullScreenを指定する

遷移先のViewControllerの持っているmodalPresentationStyleというプロパティに、.fullScreenを指定することで、回避できます。

viewController.modalPresentationStyle = .fullScreen

Storyboard使っているなら、ここを変えてください。
image.png

(画像はこちらから引用)

ちなみにデフォルトが.automatic。
この指定だと、モーダル画面がiOS13以降でも、iOS12前みたいなUIにすることができます。
ただ下スワイプを封じる目的のために、インターフェイス変えちゃうのはどうなの? というのがあります。
また、2重にモーダル起動しているケース(たとえば会員情報入力画面から重要情報説明画面をモーダルで出すとか)だと、
最初にモーダル遷移した画面がiOS13仕様なので、その上でfullScreen指定しても、下スワイプで閉じる操作は封じられません。
その場合、選択肢2を選びましょう。

2. .isModalInPresentationをtrueにして下スワイプ閉じを封じる

isModalInPresentationをtrueにすると、封じられます。

if #available(iOS 13.0, *) {
    viewController.isModalInPresentation = true
}

操作感としては、下スワイプでモーダル画面が下がりはするけども、
「ガッ」「ガッ」と引っかかって、閉じることはできない、みたいになります。
iOS13以降の操作にユーザーが慣れて、下スワイプでモーダル画面閉じられるのが当たり前という感覚になったら、
ストレスを感じる挙動になると思うので、全モーダルにこれを指定するよりかは、
閉じられたら問題が出る画面だけ使うのが賢明な気がしますね🐧🐧🐧

参考

iOS13でのモーダル表示
iOS 13 以降でモーダルを fullScreen 表示させる3つの方法

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
13
Help us understand the problem. What are the problem?