iOS14からは、UIImagePickerControllerを使用した時に、フルスクリーンではなくなったので、問題はないのですが、iPhoneがフルスクリーンの端末かつ、iOS14以前では、以下の問題が発生します
問題
UIImagePickerControllerをトリミングモードで表示して画像を選択した時に、視覚的に選択した範囲がずれる
let view = UIImagePickerController()
view.allowsEditing = true // トリミングモード
原因
有効領域は画面中央部にスクエアで存在しているが、画面上部の赤枠でかこった箇所がグレーアウトされていないので、有効領域として認識されている
この状態で画像を選択した場合、Y座標が視覚的なトリミング範囲から、上部の高さ分(44pt)ずれてしまう
※上の領域と、トリミングのスクエア領域が間抜けで結合されるわけではなく、Y座標がずれるだけ
対応(Swift4)
下記対応例では、アプリ全体で表示しない設定になるので、注意が必要
extension UIImagePickerController {
open override var childViewControllerForStatusBarHidden: UIViewController? {
return nil
}
open override var prefersStatusBarHidden: Bool {
return true
}
}
所感
トリミングモードで立ち上げているのなら、フレームワーク側で吸収してくれても良さそうな気もしました
アイコンで画像選択する際には、ほとんどがトリミングモードで選択させるUIにしていると思うので、軽視できない問題ではあると思いますが、メジャーアプリ(メジャー企業)でもいくつかこの問題に対応していない物が見受けられました(有効領域があんな場所にあるとは想像できない?ので、見落としか、それとも切り捨てか...)