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

printした結果
ViewController.viewWillAppear
ViewController.viewDidAppear
SecondViewController.viewWillAppear
SecondViewController.viewDidAppear
SecondViewController.viewWillDisappear
----- ここにViewController.viewWillAppearがあるべき -----
SecondViewController.viewDidDisappear
----- ここにViewController.viewDidAppearがあるべき -----
このModal遷移の場合は各ライフサイクルメソッドで
presentingViewController?.beginAppearanceTransition(false, animated: animated) や presentingViewController?.endAppearanceTransition() を呼んであげることで遷移元のライフサイクルメソッドも呼ばれるようになります。
ただ、iOS12以前でこの処理が書かれていると2重にライフサイクルメソッドが呼ばれてしまうので、iOS13以降でのみ実装されるように書く必要があります。
override func viewWillAppear(_ animated: Bool) {
presentingViewController?.beginAppearanceTransition(false, animated: animated)
super.viewWillAppear(animated)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
presentingViewController?.endAppearanceTransition()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
presentingViewController?.beginAppearanceTransition(true, animated: animated)
presentingViewController?.endAppearanceTransition()
}
printした結果
ViewController.viewWillAppear
ViewController.viewDidAppear
ViewController.viewWillDisappear
SecondViewController.viewWillAppear
ViewController.viewDidDisappear
ViewController.viewWillAppear
ViewController.viewDidAppear // SecondViewController.viewDidDisappearでpresentingViewControllerがnilになってしまうため順番はずれてしまう・・・
SecondViewController.viewWillDisappear
SecondViewController.viewDidDisappear
ちなみに、segueのPresentationを
Full Screen か Current Context に変更するとiOS12以前のModal遷移になります。

村田真矢
2018年入社の新卒です。
EMやっています。