iOS13のModal遷移はデフォルトだとDismiss時に遷移元のviewWillAppear等が呼ばれない

iOS, Swift

この記事は最終更新日から1年以上が経過しています。

iOS13からデフォルトのModal遷移がシート型に変更になりました。
スワイプでVCをDismissできたり遷移元の画面が見えたりといい感じにはなりましたが、
Dismiss時に遷移元のライフサイクルメソッドが呼ばれません。

printした結果

このModal遷移の場合は各ライフサイクルメソッドで presentingViewController?.beginAppearanceTransition(false, animated: animated)presentingViewController?.endAppearanceTransition() を呼んであげることで遷移元のライフサイクルメソッドも呼ばれるようになります。
ただ、iOS12以前でこの処理が書かれていると2重にライフサイクルメソッドが呼ばれてしまうので、iOS13以降でのみ実装されるように書く必要があります。

参考

printした結果

ちなみに、segueのPresentationを Full ScreenCurrent Context に変更するとiOS12以前のModal遷移になります。

ib.png

この記事を書いた人

村田真矢
村田真矢
2018年入社の新卒です。
iOSアプリの開発やCI環境の構築・管理をしています。

iOS, Swift