この記事でわかる事
- iOS13からのModalityの挙動変更内容がわかる
- iOS13でのModalityの対応方法がわかる
答えが早く知りたい人のために、結論だけ先に書いておきます
UIModalPresentationStyleにfullScreenやoverFullScreenを設定し、全画面表示してあげればiOS12以前と同じ表示になります
目次
iOS13になってModalityはどう変わったか
iOS 13からFullscreenだったModalityの挙動が変わります。
Modalityの画面例
以前までは基本的に全画面表示で表示されていたModalityが下の画面が少し見える表示になっています。
Modality動作面での変更
下方向にスワイプすると、上に表示されている画面を終了して前の画面に戻ることが可能になりました。
これでは、今まで戻るボタンを設置せずにユーザーにアクションを望んでいた動作は保証されなくなります。
iOS13でのライフサイクル挙動
検証方法と内容
ViewContollerにボタンだけを配置
ボタンを押下し、Modalityを表示
その後Modalviewを閉じた際に呼ばれるライフサイクルのメソッド順を調査
A: 遷移元のViewController
B: Modalで表示するViewController
※UIPopoverPresentationController使っていれば変わりません
検証結果
UIModalPresentationStyle | iOS12 | iOS13 |
fullScreen | A viewWillDisappear B viewWillAppear B viewDidAppear A viewDidDisappear B viewWillDisappear A viewWillAppear A viewDidAppear B viewDidDisappear | 同じ |
pageSheet | A viewWillDisappear B viewWillAppear B viewDidAppear A viewDidDisappear B viewWillDisappear A viewWillAppear A viewDidAppear B viewDidDisappear | B viewWillAppear B viewDidAppear B viewWillDisappear B viewDidDisappear |
formSheet | A 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 | 同じ |
custom | B 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の遷移でPresentationをAutomaticにしているとSemiModalになります。
default設定はpageSheetになります。
PresentationをFullScreenにしておけば全画面で表示されます
※UIPopoverPresentationControllerを使用している場合にはライフサイクルに変更はみられませんでした
まとめ
- pageSheetやfromSheetやpopoverで表示していた場合、以前はフルスクリーンで表示されていた画面がSemiModality表示に変わります。
- SemiModalityになるとスワイプで閉じることが可能になるので、アクションを必須にしていた場合に意図とは違う結果になる可能性があるのでfullScreenで表示するなどの対応が必要です
- popoverなどを使ってModalityを表示している場合はライフサイクルに変更が生じている場合があるので注意