【Swift】モーダルを下スワイプで閉じられなくなった(iOS15)


どういうことか

例としてWebViewControllerをモーダルで表示している。
――で、こんな感じ。

閉じることができない。もどかしい。

なぜか

iOS15からハーフモーダルがライブラリなしに実装できるようになったためだと思われる。
結論から言うと、閉じるためのハンドル(取っ手)をつける記述を書かないと閉じることができない。

if let sheet = webViewController.sheetPresentationController {
    // コレ
    sheet.prefersGrabberVisible = true
}

取っ手が出て閉じられるようになった。
iOS15のみの対応であるため、2021年10月現在実際に書かれるコードはこんな感じになるだろう。

if #available(iOS 15.0, *) {
    if let sheet = webViewController.sheetPresentationController {
        sheet.prefersGrabberVisible = true
    }
} else {
    // Fallback on earlier versions
}

ちなみに

ハーフモーダルにするのはたったこれだけ。

if #available(iOS 15.0, *) {
    if let sheet = webViewController.sheetPresentationController {
        sheet.detents = [.medium()]
    }
} else {
    // Fallback on earlier versions
}

ハーフモーダルにすると枠外タップで閉じることができる。フルモーダルは枠外タップ閉じることができない。
調べてないけど、閉じる(あるいは閉じない)設定もあるかもしれない。

一応公式

おわり(´・ω・`)