[iOS13]Modalityの挙動変更と対応方法を紹介

3 min

この記事でわかる事
  • iOS13からのModalityの挙動変更内容がわかる
  • iOS13でのModalityの対応方法がわかる

答えが早く知りたい人のために、結論だけ先に書いておきます

UIModalPresentationStylefullScreenoverFullScreenを設定し、全画面表示してあげればiOS12以前と同じ表示になります

iOS13になってModalityはどう変わったか

iOS 13からFullscreenだったModalityの挙動が変わります。

Modalityの画面例

以前までは基本的に全画面表示で表示されていたModalityが下の画面が少し見える表示になっています。

Modality動作面での変更

下方向にスワイプすると、上に表示されている画面を終了して前の画面に戻ることが可能になりました。

これでは、今まで戻るボタンを設置せずにユーザーにアクションを望んでいた動作は保証されなくなります。

iOS13でのライフサイクル挙動

検証方法と内容

ViewContollerにボタンだけを配置
ボタンを押下し、Modalityを表示
その後Modalviewを閉じた際に呼ばれるライフサイクルのメソッド順を調査

A: 遷移元のViewController

B: Modalで表示するViewController

UIPopoverPresentationController使っていれば変わりません

検証結果

UIModalPresentationStyle iOS12iOS13
fullScreen A viewWillDisappear
B viewWillAppear
B viewDidAppear
A viewDidDisappear
B viewWillDisappear
A viewWillAppear
A viewDidAppear
B viewDidDisappear
同じ
pageSheetA viewWillDisappear
B viewWillAppear
B viewDidAppear
A viewDidDisappear
B viewWillDisappear
A viewWillAppear
A viewDidAppear
B viewDidDisappear
B viewWillAppear
B viewDidAppear
B viewWillDisappear
B viewDidDisappear
formSheetA viewWillDisappear
B viewWillAppear
B viewDidAppear
A viewDidDisappear
B viewWillDisappear
A viewWillAppear
A viewDidAppear
B viewDidDisappear
B viewWillAppear
B viewDidAppear
B viewWillDisappear
B viewDidDisappear
currentContext A viewWillDisappear
B viewWillAppear
B viewDidAppear
A viewDidDisappear
B viewWillDisappear
A viewWillAppear
A viewDidAppear
B viewDidDisappear
同じ
customB viewWillAppear
B viewDidAppear
B viewWillDisappear
B viewDidDisappea
同じ
overFullScreen B viewWillAppear
B viewDidAppear
B viewWillDisappear
B viewDidDisappear
同じ
overCurrentContext B viewWillAppear
B viewDidAppear
B viewWillDisappear
B viewDidDisappear
同じ
popover A viewWillDisappear
B viewWillAppear
B viewDidAppear
A viewDidDisappear
B viewWillDisappear
A viewWillAppear
A viewDidAppear
B viewDidDisappear
B viewWillAppear
B viewDidAppear
B viewWillDisappear
B viewDidDisappear
automatic(iOS13から)無し B viewWillAppear
B viewDidAppear
B viewWillDisappear
B viewDidDisappear

Segueの遷移でPresentationAutomaticにしているとSemiModalになります。

default設定はpageSheetになります。

PresentationをFullScreenにしておけば全画面で表示されます

UIPopoverPresentationControllerを使用している場合にはライフサイクルに変更はみられませんでした

まとめ

  • pageSheetやfromSheetやpopoverで表示していた場合、以前はフルスクリーンで表示されていた画面がSemiModality表示に変わります。
  • SemiModalityになるとスワイプで閉じることが可能になるので、アクションを必須にしていた場合に意図とは違う結果になる可能性があるのでfullScreenで表示するなどの対応が必要です
  • popoverなどを使ってModalityを表示している場合はライフサイクルに変更が生じている場合があるので注意
カテゴリー:
タグ:
関連記事

コメントを残す

メールアドレスが公開されることはありません。