iOS UIImagePickerControllerのトリミングモードでの有効領域

  • 2021.03.16
207
NO IMAGE

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にしていると思うので、軽視できない問題ではあると思いますが、メジャーアプリ(メジャー企業)でもいくつかこの問題に対応していない物が見受けられました(有効領域があんな場所にあるとは想像できない?ので、見落としか、それとも切り捨てか...)