Swiftでモーダル表示時にviewWillDisappearが呼ばれない


Swiftでモーダル表示時にviewWillDisappearが呼ばれないということが起きました。 以下のようにボタンを押したタイミングでフルスクリーンのモーダルが表示されるとします。

Modal

modalPresentationStyle を .fullScreen にすると viewWillDisappear と viewDidAppear がモーダル表示のタイミングで呼ばれますが、.overFullScreen にすると viewDidAppear しか呼ばれませんでした。

参考: iOSにおけるモーダル表示まとめ

SecondViewController.swift

import UIKit

class SecondViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.backgroundColor = .white
    }
}

ViewController.swift

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.backgroundColor = .white
        
        let button = UIButton()
        button.setTitle("Tap Me!", for: .normal)
        button.frame.size = CGSize(width: 100, height: 100)
        button.center = view.center
        button.backgroundColor = .lightGray
        button.addTarget(self, action: #selector(tapped), for: .touchUpInside)
        view.addSubview(button)
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("viewWillDisappear")
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("viewDidAppear")
    }
    
    @objc func tapped() {
        let secondViewController = SecondViewController()
        
        // viewWillDisappear & viewDidAppear called
        secondViewController.modalPresentationStyle = .fullScreen
        
        // viewDidAppear only called
        secondViewController.modalPresentationStyle = .overFullScreen

        present(secondViewController, animated: true)
    }
}